1. 0과 1로 숫자를 표현하는 방법
📍정보 단위
컴퓨터는 0과 1밖에 이해하지 못함
- 비트(bit): 0과 1을 나타내는 가장 작은 정보단위
- n비트는 2^n 개의 정보 표현 가능
바이트(byte)
- 1바이트 = 8비트
- 1KB = 1000바이트 (1KiB = 1024바이트)
- 1MB = 1000KB (1MiB = 1024KB)
워드(word)
- CPU가 한 번에 처리할 수 있는 데이터 크기
- 예) 인텔 x86 CPU: 32비트 워드
- 예) x64 CPU: 64비트 워드
📍이진법
이진수 표기
- 10이 이진수인지 십진수인지 아무 표기가 없으면 혼동을 줄 수 있다
- 수학적으로 표현: 10(2)
- 코드 상에서 표현: 0b10 => binary를 의미
이진수의 음수 표현
- 컴퓨터는 0과 1만 이해하기 때문에 음수로 표기할 때 -를 사용할 수 없다
- 이진법에서 음수를 표현하기 위해 2의 보수를 활용
2의 보수
- 어떤 이진수를 그보다 큰 2^n에서 뺀 값
- 예) 11(2)의 2의 보수: 11(2)보다 큰 100(2)에서 11(2)를 뺀 1(2) => 4 - 3 = 1
2의 보수 쉽게 계산하는 방법
- 모든 0, 1을 뒤집고, 거기에 1을 더한 값
- 11(2) 뒤집기: 00(2)
- 여기에 +1: 01(2)
2의 보수의 특징: 마이너스 2번 하면 자기 자신이 됨
- 예) A = 100(2) 일 때, -(-A) = A
- 음수임을 표현하기 위해 양수/음수 플래그 사용
2의 보수 표현의 한계
- 0이나 2^n에 대해 2의 보수를 취하면 이상한 값이 나오거나 자기 자신이 되어 버림
- 0(2) => 1(2) => 10(2)
- 1000(2) => 0111(2) => 1000(2)
📍십육진법
2진법은 자릿수가 너무 많이 필요하다는 단점이 있어서, 16진법도 자주 사용한다
- 15(16)
- 0x15 => hexadecimal
- 2진수에서 16진수로 변환하거나 반대로 변환이 쉽다
16진수 => 2진수 변환
- 예) 1A2B(16)이 있을 때, 각 16진수의 한 글자를 4비트의 이진수(0000 ~ 1111)로 간주
- 1: 0001
- A: 1010
- 2: 0010
- B: 1011
=> 0001 1010 0010 1011(2)
2진수 => 16진수 변환
- 2진수를 4비트씩 끊어서 16진수로 변환
- 예) 11010101(2) => 1101 0101 => D5(16)
2. 0과 1로 문자를 표현하는 방법
📍문자 집합과 인코딩
문자집합(character set)
- 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- 문자는 문자 인코딩을 거쳐 0, 1로 이루어진 결과로 변환됨
- 반대의 경우를 문자 디코딩이라고 함(0, 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환)
📍아스키 코드(ASCII)
- 초창기 문자 집합 중 하나로 알파벳과 숫자, 일부 특수 문자로 이루어짐
- 각 문자는 7비트로 표현됨 (0000 0000 이상 1000 0000 미만) => 총 2^7 = 128개
- 7비트 이외에 패리티 비트 1비트를 사용하여 오류 검출을 위해 사용
- 예) A는 65번째 ASCII, a는 97번째 ASCII
아스키 코드 단점
- 표현할 수 있는 문자 수가 적음 (128개, 확장 아스키의 경우 256개)
📍EUC-KR
- 한글 인코딩 방식 중 하나로, KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 완성형 인코딩 방식
- 완성형 인코딩: 초성, 중성, 종성이 합쳐진 1글자에 고유한 코드를 부여
- 한글 1단어에 2바이트(16비트)
EUC-KR의 단점
- 모든 한글을 표현할 수 없음 (예 - 쀍) => 이로 인해 몇몇 한글 문자가 깨지는 현상 발생
- MS의 CP949로 확장된 EUC-KR 버전을 사용할 수 있으나, 한글 전체를 표현할 수 없음
📍유니코드와 UTF-8
유니코드
- 한글, 일본어 등 대부분의 나라의 문자, 특수문자, 이모티콘 등을 코드로 표현 가능
- 현대 문자를 표현할 때 가장 많이 사용하는 표준 문자 집합
- 예) 한 -> U+D55C (이 때, U+는 16진수 유니코드를 의미)
UTF-8
- 가장 대중적인 유니코드 인코딩 방식
- 인코딩 결과 1바이트 ~ 4바이트 값을 만들어 냄