[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의 보수를 취하면 원하는 음수값을 얻을 수 없다.
- 0000(2) -> 10000(2)
- 이 경우엔 자리 올림이 발생한 비트의 1을 버림
- 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의 약어이다.