컴퓨터 구조 - 2-1. 데이터의 표현(단위, 진법, 보수)
이 포스트는 패스트캠퍼스의 “컴퓨터 공학 전공 필수 올인원 패키지 Online.” 강의를 보고 정리한 내용입니다.
데이터의 표현
컴퓨터에서 데이터를 표현하는 방법에 대해서 알아보자.
1. 단위
디지털 정보의 단위는 지난 포스트의 표에 정리된 단위들을 포함해 다양한 단위들이 있다.
단위명 | 범위 |
---|---|
비트(Bit) | 0, 1 |
바이트(Byte) | 1 byte = 8 bit |
워드(Word) | 기계에 따라 상이. 1 Word = 32 bit or 64 bit |
킬로바이트(KB, KiloByte) | 1 KB = 1024 byte = $2^{10}$ byte |
메가바이트(MB, MegaByte) | 1 MB = 1024 Kbyte = $2^{20}$ byte |
기가바이트(GB, GigaByte) | 1 GB = 1024 Mbyte = $2^{30}$ byte |
테라바이트(TB, TeraByte) | 1 TB = 1024 Gbyte = $2^{40}$ byte |
이 외에도 4bit 에 해당하는 nibble 과 한 문자를 나타내는 character, 특정 CPU 에서 취급하는 명령어/데이터의 길이를 나타내는 word 등이 있다.
단위명 | 범위 |
---|---|
니블(Nibble) | 4 bit |
문자(Character) | 1 문자 = 1 byte (영어) = 2 byte (한글) |
워드(Word) | 8 / 16 / 32 / 64 bit |
2. 진법과 진법 변환
2-1. 진법(Number System)
- 2 진법 : 0 과 1 두가지 기호로 표현하는 수의 체계
- 8 진법 : 0 ~ 7 여덟가지 기호로 표현하는 수의 체계
- 10 진법 : 0 ~ 9 열가지 기호로 표현하는 수의 체계
- 16 진법 : 0 ~ F 열여섯가지 기호로 표현하는 수의 체계
숫자\진법 | 2진수(0~1) Binary | 8진수(0~7) Octal | 10진수(0~9) Decimal | 16진수(0~F) Hexadecimal |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 | 2 |
3 | 11 | 3 | 3 | 3 |
4 | 100 | 4 | 4 | 4 |
5 | 101 | 5 | 5 | 5 |
8 | 1000 | 10 | 8 | 8 |
9 | 1001 | 11 | 9 | 9 |
10 | 1010 | 12 | 10 | A |
11 | 1011 | 13 | 11 | B |
15 | 1111 | 17 | 15 | F |
16 | 10000 | 20 | 16 | 10 |
17 | 10001 | 21 | 17 | 11 |
2-2. 진법의 변환
· N 진수를 10 진수로
N 진수 $n_1n_2n_3n_4n_5$ 단, $n_x < N$
$n_1n_2n_3n_4n_5 = n_1 * N^4 + n_2 * N^3 + n_3 * N^2 + n_4 * N^1 + n_5 * N^0$
· 8 / 16 진수와 2진수
2진수의 3자리씩 묶으면 8진수, 4자리씩 묶으면 16진수.
8진수의 1자리는 2진수의 3자리, 16진수의 1자리는 2진수의 4자리.
· 분수(실수)의 변환
숫자 17.75 를 2진수로 변환
정수부는 그대로 변환 : 10001
소수부는 2를 곱해가며 정수부를 보고 적는다.
0.75 * 2 = 1.5
0.5 * 2 = 1.0
따라서 소수부는 11
결과적으로 분수의 2진수 값은 10001.11
하지만 이렇게 정확히 떨어지는 경우는 많지 않기 때문에 일반적으로 숫자를 우절삭 해서 반올림하던가 너무 작은숫자는 띠어낸다.
2-3. 보수(Complement)
컴퓨터에서는 덧셈으로만 연산을 하는데, 더 다양한 연산을 위해 보수가 사용된다.
· One’s Complement(1의 보수)
N자리의 수에서 최대값(가장 큰 표현형)을 덧셈을 통해 만들어낼 수 있는 두 수.
2자리 10진수를 가정하여 One’s Complement 관계를 만족하는 두 수 A, B 가 있다면 다음과 같이 표현할 수 있다.
$A + B = 99$
2진수를 보면 더욱 쉽다. 표현가능한 숫자가 0, 1 두 가지밖에 없기 때문이다.
5자리 2진수를 가정하여 A 가 10110 이라고 하면, B 는 이를 뒤집은 01001 이 된다. 이 두 수를 더하면 다음과 같다.
$A + B = 11111$
· Two’s Complement(2의 보수)
Modulus(최대 표현 자리 수)를 덧셈을 통해 만들어낼 수 있는 두 수.
2자리 10진수를 가정하여 Two’s Complement 관계를 만족하는 두 수 A, B 가 있다면 다음과 같이 표현할 수 있다.
$A + B = 100$
만약 A 가 41 이라면 각 자리수를 최대로 만드는 값은 58 이다.(41 + 58 = 99)
Two’s Complement 는 여기에 1을 더한 값을 뜻한다. 따라서 B 가 A 의 Two’s Complement 가 되려면 $B = 58 + 1 = 59$, 즉 59 여야 한다.
이는 단순하게 One’s Complement 값에 1을 더한다고 생각하면 된다.
다시 2진법으로 생각해보자. A 가 10010 이라고 하면 Two’s Complement 를 만족하는 B 는,
A 의 One’s Complement 인 01101 에 1 을 더한 01110 이 된다.
보수의 활용
보수의 활용법에는 크게 2가지가 있다.
1. 양수/음수로 활용
4bit 로 수를 표현한다고 가정해보자. 경우의 수는 다음 표와 같다.
2진수 값 | 10진수 값 | 1의 보수 | 2의 보수 |
---|---|---|---|
0 0 0 0 | 0 | 0 | 0 |
0 0 0 1 | 1 | 1 | 1 |
0 0 1 0 | 2 | 2 | 2 |
0 0 1 1 | 3 | 3 | 3 |
0 1 0 0 | 4 | 4 | 4 |
0 1 0 1 | 5 | 5 | 5 |
0 1 1 0 | 6 | 6 | 6 |
0 1 1 1 | 7 | 7 | 7 |
1 0 0 0 | 8 | -7 | -8 |
1 0 0 1 | 9 | -6 | -7 |
1 0 1 0 | 10 | -5 | -6 |
1 0 1 1 | 11 | -4 | -5 |
1 1 0 0 | 12 | -3 | -4 |
1 1 0 1 | 13 | -2 | -3 |
1 1 1 0 | 14 | -1 | -2 |
1 1 1 1 | 15 | -0 | -1 |
2. 연산에 활용
보수를 활용하면 뺄셈을 덧셈으로 처리가 가능하다.
먼저 1의 보수를 활용한 연산을 보자.
🔹10진수 연산
68 - 32 를 수행하기 위해 32 를 1의 보수로 바꾼 뒤 덧셈으로 치환한다. 10진수 이므로 32 의 1의 보수는 67 이 된다.
$68 - 32 = 68 + 67 = 135$
연산 결과값에서 초과된 자리수의 값인 1을 가장 마지막 자리수에 더해준다.
$135 = 35 + 1 = 36$
뺄셈의 최종 결과값은 36이 된다.
🔹2진수 연산
$11010_2 - 00101_2$ 에서 마찬가지로 뺄셈에 사용될 2진수 값을 1의 보수로 치환하고 덧셈을 한다.
\[\begin{align} 11010_2 - 00101_2 &= 11010_2 + 11010_2 \\ &= 110100_2 \\ &= 10100_2 + 00001_2 \\ &= 10101_2 \end{align}\]뺄셈의 최종 결과값은 $10101_2$ 이 된다.