2.1 0과 1로 숫자를 표현하는 방법

비트는 0과 1로 표현할 수 있는 가장 작은 정보 단위
바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트는 비트보다 더 큰 정보 단위
이진법은 1을 넘어가는 시점에 자리올림해서 0과 1만으로 수를 표현하는 방법
이진법에서 음수는 2의 보수로 표현할 수 있다.
십육진법은 15를 넘어가는 시점에 자리올림해서 수를 표현하는 방법

정보 단위

  • 비트: 0과 1을 나타내는 가장 작은 정보 단위
    • 전구에 빗대면 0(꺼짐) 또는 1(켜짐) 두가지 상태로 나타낼 수 있다.
    • 2비트로 전구 상태를 표현하면 4가지 상태, 3비트로 표현하면 8가지 상태로 나타낼 수 있다. = 2n가지 상태로 나타낼 수 있는 셈
  • 바이트: 비트 8개를 묶은 단위(2의 8승 = 256가지 상태)
  • 킬로바이트: 바이트 1000개를 묶은 단위(여기서 부터 8개가 아닌 1000개 단위로 표현)
  • 메가바이트: 킬로바이트 1000개를 묶은 단위
  • 기가바이트: 메가바이트 1000개를 묶은 단위
  • 테라바이트: 기가바이트 1000개를 묶은 단위

이진법

  • 0과 1만으로 구성해서 숫자가 1을 넘어가는 시점에 자리올림하여 숫자를 표현하는 방법
  • 사람은 일상에서 십진법으로 숫자를 읽지만 컴퓨터는 이진법으로 변환해 주어야 읽을 수 있다.

이진수로 음수 표현하기

  • 십진법으로 음수를 표현할 때 -(마이너스)를 붙이면 되지만 컴퓨터는 0과 1만 읽을 수 있으므로 2의 보수로 표현해야 한다.
  • 어렵게 생각할 필요없이 모든 0과 1을 뒤집고, 거기에 1을 더한 값이 2의 보수이다.(색상 보색 관계를 생각하면 보수의 의미가 조금 더 와닿을 것 같다.)

십육진법

  • 숫자가 15를 넘어가는 시점에 자리올림하여 숫자를 표현하는 방법
  • 이진법으로만 숫자를 표현하면 큰 숫자일수록 자릿수가 많아지기 때문에 십육진법을 사용하기도 한다.
  • 10~15를 A~F로 표기
  • 보기 편한 십진법이 있는데 왜 십육진법을 사용하냐고? 이진수 <-> 십육진수 변환이 쉽기 때문(아무튼 쉬움)
  • HW 관련 개발 분야에서는 십육진법을 자주 사용함

2.2 0과 1로 문자를 표현하는 방법

문자 집합에 속한 문자를 인코딩해서 0과 1로 표현
아스키코드 인코딩 0~127수를 아스키 문자 집합에 할당
EUC-KR 한글을 2바이트로 인코딩하는 방식
유니코드 전세계 통용 인코딩 방식(UTF-8)

문자 집합과 인코딩

  • 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자 모음
  • 인코딩: 문자 집합에 속한 문자를 0과 1로 변환하는 방식
  • 디코딩: 0과 1로 이루어진 문자를 사람이 이해할 수 있게 변환하는 방식

아스키 코드

  • 알파벳, 아라비아 숫자, 일부 특수 문자를 포함한 128가지 문자
  • 아스키 코드로 한글을 표현할 수 없다.

EUC-KR

  • 한글을 인코딩하는 방식
  • 한글은 초성, 중성, 종성으로 이루어져 있기 때문에 기존 인코딩 방식이 맞지 않음
  • 완성형 인코딩: 초성+중성+종성 조합으로 이루어진 글자에 고유 코드를 부여하는 방식
  • 조합형 인코딩: 초성, 중성, 종성 각각 비트열을 할당해서 조합하는 방식
  • 한글은 한 글자에 2바이트 코드를 부여하기 때문에 EUC-KR로 인코딩한 글자를 표현하려면 16비트가 필요함 = 16비트는 네 자리 십육진수로 표현할 수 있음
  • 모든 한글 문자를 표현할 수 없기 때문에 일부 글자는 깨지거나 나타나지 않을 수 있음

유니코드와 UTF-8

  • 한글을 구원할 구세주
  • 모든 언어 표현을 통일하자 -> 유니코드(특수 문자, 이모티콘까지 표현할 수 있다.)
  • UTF-8: 가장 대중적인 유니코드 인코딩 방식
  • UTF-8로 인코딩한 한글은 한 글자 당 3바이트
profile
레오나의 기묘한 개발 일지

0개의 댓글