정보 단위
컴퓨터는 기본적으로 0과 1밖에 이해하지 못한다. 따라서, 두 가지 상태를 갖는 이진법 체계를 사용하며 가작 작은 정보 단위를 비트(bit)라고 한다. 또한, 우리가 흔히 사용하는 바이트(byte) 단위는 8개의 비트를 묶은 단위를 말한다.
워드(word)
중요한 정보 단위 중 워드(word)라는 단위도 존재한다. 이는 CPU가 한 번에 처리할 수 있는 데이터 크기를 의미하며, 32비트 컴퓨터, 64비트 컴퓨터에서 32, 64비트는 1 워드를 말한다. CPU가 한 번에 32비트를 처리할 수 있다면 1워드는 32비트(=레지스터 크기)가 된다. 따라서, 주소를 $32bit = 4,294,967,296$개 까지 표현할 수 있으며 보통의 메모리는 주소당 1바이트의 크기를 가지므로, 32비트 컴퓨터는 $4,294,967,296*1byte = 4GB$의 메모리까지 인식할 수 있는 것이다.
이진수의 음수 표현
이진법 체계에서 음수를 표현하기 위한 방법으로는 크게 세 가지가 있다.
(참고)
[CS] 컴퓨터의 음수 표현 (ft. Complement)
늘 알고 있다고 생각하지만, 조금만 호벼파보면 얼마 못가서 그 얕음이 낱낱이 드러나는 파트가 또 이 부분이 아닐까 싶다ㅠ 확실히 이해하고자 스스로 정리하는 컴퓨터의 음수 표현 (ft. 보수) 0
huzahuza.tistory.com
부호화 절댓값 표현(Signed magnitude representation)
| 10진법 | 2진법 |
| 2 | 010 |
| 1 | 001 |
| 0 | 000 |
| -0 | 100 |
| -1 | 101 |
| -2 | 110 |
위와 같이 최상위 비트(Most significant bit)를 수의 부호를 표현하는 데 사용하는 가장 직관적인 방법이다. 하지만 이는 몇 가지 문제점이 존재한다.
1. +0과 -0이 구분된다.
2. MSB를 확인하여 부호를 판단한 뒤 계산해야 하므로 뺄셈을 별도로 연산해야 한다.
3. 음수 간의 비교가 제대로 동작하지 않는다. (-1 > -2 → 101 < 110)
보수 방식(Method of Complement)
보수란, 같은 범위의 양수와 음수를 같은 덧셈 알고리즘으로 연산할 수 있게 만드는 방법이다. n자리 수의 보수는 n-1의 보수와 n의 보수 방식이 존재한다.
(n-1)의 보수
n-1의 보수는 $b$진법 수 $x$에 대한 $(n-1)$보수를 다음과 같이 표현한다.
$$ (b^n-1)-x $$
ex)
10진수에서 1의 보수는 $(10^1-1)-1=8$이 된다.
2진수의 경우, 10의 보수는 $(2^2-1)-2 = 1 = 01(2)$가 되므로, 각 자릿수의 비트를 뒤집은 수가 된다.
이러한 방식은 2진수 계산에서 다음은 몇 가지 특징을 보인다.
1. 0이 나오는 결괏값에서 무조건 -0이 도출된다.
2. 뺄셈을 음수와의 덧셈으로 대체 가능하다.
3. 음수 간의 비교가 용이하다.
4. 덧셈 연산에서 표현 범위 외로 벗어나는 올림수(carry = End-Around Carry)가 발생하면, 이를 LSB에 더해주는 형태를 취해야 올바르게 동작한다.
위와 같이 몇 가지 문제점이 존재하지만, SMR보다는 나은 결과를 보인다.
n의 보수
n의 보수는 $b$진법 수 $x$에 대한 $(n-1)$보수를 다음과 같이 표현한다.
$$ b^n-x $$
ex)
10진수에서 1의 보수는 $10^1-1=9$이 된다.
2진수의 경우, 10의 보수는 $2^2-2 = 4(10) = 10(2)$가 되므로, 각 자릿수의 비트를 뒤집은 수에 1을 더한 값이 된다.
이는 다음과 같은 특징을 가진다.
1.0이 +0만 존재한다.
1. 뺄셈을 음수의 덧셈으로 대체 가능하다.
2. 여전히 음수 간의 비교가 잘 동작한다.
3. 순환 형태에서 -1 다음이 0으로 표현되기 때문에 EAC(End-Around Carry)를 고려하지 않아도 덧셈 연산이 잘 동작한다.
이진수의 문자 표현
우리가 사용하는 문자를 컴퓨터가 입/출력이 가능하도록 하려면 문자 집합을 이진수로 변환하는 문자 인코딩 과정과 이진수를 문자로 변환하는 문자 디코딩 과정이 필요하다. 가장 대표적으로 알려진 문자 집합으로 아스키코드가 있다. 이는 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자를 포함한다. 아스키코드는 8비트로 표현되며 7개의 비트는 문자 표현에 사용하여 총 128개의 문자를 표현할 수 있으며, 나머지 1비트는 오류 검출을 위한 패리티 비트로 사용된다.
이진수를 활용한 한글 표현
한글을 이진수로 표현하기 위해서는 한글의 특수성을 고려해야 한다. 한글은 초성, 중성, 중성의 조합으로 하나의 글자가 완성된다. 이를 고려한 한글 인코딩에는 크게 두 가지 방식, 완성형 인코딩과 조합형 인코딩이 존재한다.
완성형 인코딩은 초성, 중성, 종성의 조합으로 완성된 하나의 글자에 코드를 부여하는 방식으로, ‘가’는 1, ‘나’는 2와 같은 형태를 가진다.
조합형 인코딩은 초성, 중성, 종성에 각각 코드를 부여하는 방식으로 하나의 글자를 표현하는 데에 사용된 초성, 중성, 종성의 코드를 조합한다. 예를 들어, ‘ㄱ’은 0001, ‘ㅏ’는 0010이면, ‘가’는 0001 0010으로 표현된다.
초창기의 한글 문자 집합인 EUC-KR은 완성형 인코딩 방식을 취하며, 각 글자를 2바이트 크기로 표현한다. 하지만, 2바이트로는 모든 한글 조합을 표현할 수 없다는 한계점이 있다.
유니코드와 UTF-8
각 나라의 언어별로 인코딩을 다르게 해야 한다면 여러 나라에서 서비스하는 프로그램을 만들 때 모든 나라의 언어 인코딩을 고려해야 한다. 이를 해결하기 위해서는 모든 나라 언어의 문자 집합과 인코딩 방식이 통일된 방식이 필요했으며, 이에 따라 유니코드 문자 집합이 등장했다.
유니코드는 EUC-KR과 동일하게 한글에 대해 완성형 글자에 대해 값을 부여한다. 하지만 글자에 부여된 값 자체를 인코딩 값으로 사용하지 않고, 다양한 방법으로 인코딩을 진행한다. 각 방식에 따라 크게 UTF-8, UTF-16, UTF-32로 분류된다.
그중 가장 대중적인 UTF-8은 다음 표에 따라서 1~4바이트 크기를 가진 인코딩 결과를 만든다.

만약 문자 집합에서 ‘한’이라는 글자에 D55C(16)이라는 코드를 가진다면 이는 0800(16)과 FFFF(16) 사이에 존재하므로 이는 3바이트 크기를 가지는 것을 알 수 있다. 또한, 이는 이진수로 1101 0101 0101 1100로 표현되고, UTF-8 방식으로 인코딩했을 때 1110(1101) 10(010101) 10(011100)로 표현된다.
참고 자료:
강민철. 『혼자 공부하는 컴퓨터 구조 + 운영체제』. 한빛미디어, 2022.
'CS > 컴퓨터 구조' 카테고리의 다른 글
| Chapter 5. CPU 성능 향상 기법 (0) | 2026.03.06 |
|---|---|
| Chapter 4. CPU의 작동 원리 (0) | 2026.03.06 |
| Chapter 3. 명령어 (0) | 2026.03.06 |
| Chapter 1. 컴퓨터 구조 시작하기 (0) | 2026.03.06 |
| 컴퓨터 구조 OT (0) | 2026.03.06 |