이진법: 0과 1로 숫자, 문자 표현하기

최건우·2023년 1월 10일
0

컴퓨터는 0, 1로 모든 정보를 표현한다. 컴퓨터가 숫자, 문자를 각각 어떻게 이진법으로 표현하는지 공부해 보자.

숫자의 표현

정보 단위

  1. 비트(bit)
    1. 0과 1을 표현할 수 있는 가장 작은 정보 단위.
    2. n비트는 2n 가지 정보를 표현할 수 있다.
      1. 1비트는 두 가지 정보를 표현할 수 있다: 0, 1
      2. 2비트는 네 가지 정보를 표현할 수 있다: (0, 0), (0, 1), (1, 0), (1, 1)
      3. 3비트는 여덟 가지 정보를 표현할 수 있다: (0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0), (1, 1, 1)
  2. 바이트(byte)
    1. 비트보다 한 단계 큰 단위로서, 1 byte = 8 bit
    2. n바이트는 28n 가지 정보를 표현할 수 있다.
  3. 킬로바이트(kilobyte)
    1. 바이트보다 한 단계 큰 단위로서, 1 kilobyte = 1000 bit
  4. 메가바이트(megabyte)
    1. 킬로바이트보다 한 단계 큰 단위로서, 1 megabyte = 1000 kilobyte
  5. 기가바이트(gigabyte)
    1. 메가바이트보다 한 단계 큰 단위로서, 1 gigabyte = 1000 megabyte
  6. 테라바이트(terabyte)
    1. 기가바이트보다 한 단계 큰 단위로서, 1 terabyte = 1000 gigabyte
word: CPU가 한 번에 처리할 수 있는 데이터 크기.
- 1워드 = 16비트일 경우,
  - 하프 워드(half word): 8비트
  - 풀 워드(full word): 16비트
  - 더블 워드(double word): 32비트
- 현대 컴퓨터의 대부분의 워드 크기는 32비트 또는 64비트이다.

출처: https://ko.wikipedia.org/wiki/%EC%9B%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

이진법

  • 이진법(binary): 0, 1만으로 모든 숫자를 표현하는 방법
  • 이진수: 이진법으로 표현한 수
  • 하나의 이진수 = 1비트

  • 십진법(decimal): 0 ~ 9 10개의 숫자로 모든 숫자를 표현하는 방법
  • 십진수: 십진법으로 표현한 수

이진수의 표기

  • 이진수 '8'의 수학적 표기: 1000(2)
  • 이진수 '8'의 코드상 표기: 0b1000

이진수의 음수 표현

  • 컴퓨터가 0, 1만 이해할 수 있으므로 '-'를 붙이는 것으로는 이진수의 음수를 표현할 수 없다.
  • 2의 보수를 구해 이 값을 음수로 간주하여 음수를 표현하는 방법이 일반적이다.
    • 보수(complement): 어떤 수를 그보다 큰 2n에서 뺀 값.
  • 보수를 구하는 법
    • (1) 11(2) 보수는, 11(2) 보다 큰 2n인 100(2) 에서 11(2)를 뺀 01(2)이 됨.
    • (2) 이진수에서 모든 0과 1을 뒤집은 후 1을 더한다(더 쉬운 방법).
  • 이진수의 양수와 음수를 구분하기 위해, 컴퓨터는 플래그(flag) 라는 부가정보를 사용한다.

십육진법

  • 이진법으로 컴퓨터가 이해하는 모든 숫자를 표현할 수는 있지만, 너무 길어진다는 단점이 있다. 이를 보완하기 위해 십육진법(hexadecimal)이 사용된다.
  • 십육진법은 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식이다.
  • 십진법의 10, 11, 12, 13, 14, 15 => 십육진법에서는 A, B, C, D, E, F
  • 십육진법을 사용하는 주된 이유는 이진수와 십육진수의 상호 변환이 쉽기 때문이다.
  • 하나의 십육진수 = 4비트(24)

십육진수의 표기

  • 십육진수 '15'의 수학적 표기: 15(16)
  • 십육진수 '15'의 코드상 표기: 0x15

문자의 표현

0과 1로 어떻게 문자를 표현할 수 있을까?

문자 집합과 인코딩

  • 문자 집합(character set): 컴퓨터가 인식하고 표현할 수 있는 문자의 모음. 이 외의 문자는 이해할 수 없다.
  • 문자 인코딩(character encoding): 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정. 인코딩을 통해 비로소 컴퓨터가 문자를 이해할 수 있다.
  • 문자 디코딩(character decoding): 인코딩의 반대 과정. 0, 1로 이루어진 문자 코드문자로 변환하는 과정. 디코딩을 통해 비로소 사람이 문자 코드를 읽을 수 있다.

다양한 문자 집합과 인코딩 방법

아스키코드(ASCII: American Standard Code for Information Interchange)

  • 영어 알파벳, 아라비아 숫자, 일부 특수 문자를 표현
  • 아스키 문자 집합에 속한 문자는 7비트로 표현되어, 총 27개의 문자를 표현할 수 있다.
  • Backspace, Escape, Cancel, Space, Del과 같은 제어 문자도 포함되어 있다.
  • 문자 하나당 크기: 1바이트(=8비트)
  • 단, 한글을 표현할 수 없고, 비트수의 한계로 표현 가능한 문자 수가 많이 부족하다.
  • 8비트의 확장 아스키(Extended ASCII)가 등장했으나, 이 역시 256개의 문자만 표현할 수 있다.

EUC-KR

  • 한글을 위해 개발된 인코딩 방식.
    • 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식.
    • 조합형 인코딩: 초성, 중성, 종성 각각에 비트열을 할당하고 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식.
  • 문자 하나당 크기: 초성, 중성, 종성이 모두 결합된 한글 단어가 2바이트(=16비트)이다.
    • 따라서 EUC-KR로 인코딩된 한글은 네 자리 십육진수로 표현 가능.
  • 하지만 모든 한글을 표현할 수 없음(ex. '쀍', '믜' 등)
  • MS의 CP949(Code Page 949) 라는 EUC-KR의 확장 버전의 인코딩 방식을 개발했으나, 한글 전체를 표현하기에는 역시 부족함.

유니코드와 UTF-8

  • 유니코드(Unicode): 여러 나라의 언어를 광범위하게 언어를 아우르는 문자 집합과 통일된 표준 인코딩 방식으로서, 언어별로 인코딩하는 비용을 덜어줌.
  • 한글 뿐만 아니라 문자, 특수문자, 화살표, 이모티콘 등도 표현할 수 있다.
  • 유니코드는 글자에 부여된 값을 그대로 사용하는 것이 아니라, UTF-8, UTF-16, UTF-32 등의 방식으로 인코딩한 값을 사용한다.
    • UTF: Unicode Transformation Format
    • 가장 대중적인 방식은 UTF-8로서 통상 1바이트 ~ 4바이트의 인코딩 결과를 만들어 내는데, 이 크기는 유니코드 문자에 부여된 값의 범위에 따라 결정된다.
  • UTF-8 인코딩 과정
    • EUC-KR처럼, 각 문자마다 십육진수의 고유한 값이 부여된다.
    • 각 문자마다 부여된 십육진수를 이진수로 변환한다.
    • 변환된 모든 이진수를 나열한 것이 인코딩 결과물이 된다.





* 이 글은 '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 2022)'를 개인적인 학습을 목적으로 요약한 게시글입니다. 문제가 있는 경우, 지적해 주시면 감사하겠습니다.

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글