Post

[CS] Chapter 02. 데이터

혼자 공부하는 컴퓨터 구조 + 운영체제 (한빛미디어 출판, 강민철 지음) 으로 공부한 내용을 정리합니다.
CS Study를 통해 함께 공부하고 있습니다. [github repository]

✅ 02 - 1. 0과 1로 숫자를 표현하는 방법

컴퓨터가 이해하는 정보의 단위를 학습, 이진법과 십육진법을 통해 숫자를 표현하는 방법에 대해 학습
핵심 키워드 : 비트 바이트 이진법 2의 보수 십육진법

✔️ 정보 단위

  • 비트(bit) : 0과 1을 나타내는 가장 작은 정보 단위
  • 바이트(byte) : 여덟 개의 비트를 묶은 단위. 비트보다 한 단계 큰 단위
  • 킬로바이트(kB: kilobyte) : 1kB = 1,000byte
  • 메가바이트(MB: megabyte) : 1MB = 1,000kB
  • 기가바이트(GB: gigabyte) : 1GB = 1,000MB
  • 테라바이트(TB: terabyte) : 1TB = 1,000GB
  
1바이트(1byte)8비트(8bit)
1킬로바이트(1kB)1,000바이트(1,000byte)
1메가바이트(1MB)1,000킬로바이트(1,000kB)
1기가바이트(1GB)1,000메가바이트(1,000MB)
1테라바이트(1TB)1,000기가바이트(1,000GB)

✔️ 이진법

  • 이진법(binary) : 수학에서 0과 1만으로 모든 숫자를 표현하는 방법
    • 이진수 : 이진법으로 표현된 수
    • 십진수 : 십진법으로 표현된 수
  • 이진수를 표현할 때는 끝에 (2)를 붙이거나, 앞에 0b를 붙인다.
    • ex) 이진수 8 표기 -> 1000(2) or 0b1000

🔎 이진수의 음수 표현

  • 2의 보수(two's complement)를 구해 이 값을 음수로 간주
  • 사전적 정의
    • 2의 보수 : 어떤 수를 그보다 큰 $2^n$에서 뺀 값
    • ex) 11(2)의 2의 보수는 100(2)에서 11(2)을 뺀 01(2)
  • 편한 방법
    • 2의 보수 : 모든 0과 1을 뒤집고, 거기에 1을 더한 값
    • ex) 11(2)의 모든 0과 1을 뒤집으면 00(2)이고, 거기에 1을 더하면 01(2)

음수인지 양수인지 어떻게 구분하나요? => 플래그(flag)를 사용한다.

2의 보수 표현의 한계

  • 2의 보수를 취하는 방식은 가장 널리 사용되는 방식이지만, 완벽한 방식은 아니다.
  • 0이나 $2^n$ 형태에 2의 보수를 취하면 원하는 음수값을 얻을 수 없다.
    1. 0000(2) -> 10000(2)
      • 이 경우엔 자리 올림이 발생한 비트의 1을 버림
    2. 1000(2) -> 1000(2)
      • 이 경우엔 자기 자신이 되기 때문에 본질적으로 해결하기 어려움. 표현 불가

✔️ 십육진법

십육진법(hexadecimal)은 수가 15를 넘어갈 때 자리 올림을 하는 숫자 표현 방식이다. 이진법에 비해 더적은 자릿수로 더 많은 정보를 표현할 수 있다.

10, 11, 12, 13, 14, 15를 십육진법에서는 A, B, C, D, E, F로 표기한다.

마찬가지로 십육진수를 표기할 때는 뒤에 (16)을 붙이거나, 앞에 0x를 붙인다.

  • ex) 15표기 -> 15(16) or 0x15

✔️ 십육진수를 이진수로 변환하기

십육진수 하나를 이진수로 표현하려면 $2^4 = 16$이니 4비트가 필요하다.

십육진수 한 글자를 4비트의 이진수로 간주하고 변환하여, 그대로 이어 붙이면 이진수로 변환된다.

✔️ 이진수를 십육진수로 변환하기

반대로 이진수를 십육진수로 변환할 때는 4자리씩 끊어서 16진수로 변환하고 붙이면 된다.

✅ 02 - 2. 0과 1로 문자를 표현하는 방법

아스키 코드, 유니코드 등은 컴퓨터가 이해할 수 있는 0과 1로 다양한 문자를 표현하는 방법이다.
핵심 키워드 : 문자 집합 아스키 코드 EUC-KR 유니코드

✔️ 문자 집합과 인코딩

문자 집합 (character set)
컴퓨터가 인식하고 표현할 수 있는 문자의 모음
문자 인코딩 (character encoding)
문자를 0과 1로 변환하는 과정
문자 디코딩 (character decoding)
0과 1로 이루어진 문자 코드를 문자로 변환하는 과정

✔️ 아스키 코드

아스키(ASCII: American Standard Code for Information Interchange)는 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자를 포함한다. 아스키 문자는 7비트로 표현되어 총 128개의 문자를 표현할 수 있다.

실제로는 하나의 아스키 문자를 나타내기 위해 8비트(1바이트)를 사용. 하지만 8비트 중 1비트는 패리티 비트(parity bit)라고 불리는 오류 검출을 위해 사용되는 비트이기 때문에 실질적으로 문자 표현을 위해 사용되는 비트는 7비트이다.

✔️ EUC-KR

한글 인코딩 방식에는 두 가지 방식이 있다.

완성형 인코딩
초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여
조합형 인코딩
초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성

EUC-KR은 KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 대표적인 완성형 인코딩 방식. 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여.

CP949(Code Page 949)
문자 집합에 정의되지 않은 글자는 표현할 수 없는 EUC-KR 방식을 조금이나마 해결하고자 마이크로소프트에서 만든 EUC-KR의 확장 버전. 다만, 이마저도 한글 전체를 표현하기에 넉넉한 양은 아니다.

✔️ 유니코드와 UTF-8

모든 나라 언어의 문자 집합과 인코딩 방식이 통일되도록 한 것이 유니코드(unicode) 문자 집합이다.

유니코드는 EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지도 코드로 표현할 수 있는 통일된 문자 집합이다.

유니코드는 다양한 방법으로 인코딩한다. 인코딩 방법으로는 크게 UTF-8, UTF-16, UTF-32 등이 있다.

UTF는 Unicode Transformation Format의 약어이다.

This post is licensed under CC BY 4.0 by the author.

[CS] Chapter 01. 컴퓨터 구조 시작하기

[CS] Chapter 03. 명령어