2진수, 8진수, 16진수, 보수, 음수 표현
학습 전략과 이산수학·논리회로 학습 절입니다.
이번 절에서는 컴퓨터공학의 밑바닥을 배웁니다.
컴퓨터는 숫자, 문자, 그림, 소리까지 전부 0과 1로 바꿔서 저장하고 계산합니다.
이번 절의 핵심은 다음과 같습니다.
10진수 → 2진수로 바꾸기
2진수 → 10진수로 바꾸기
2진수를 8진수, 16진수로 짧게 표현하기
컴퓨터가 음수를 표현하는 방법
2의 보수로 뺄셈하기이 내용은 네 시험 범위에서 이산수학의 진법변환·이진법 연산, 논리회로의 데이터 표현, 컴퓨터구조의 진법·보수·수의 표현에 걸쳐 있습니다.
진법과 자리값
진법이란?
진법은 숫자를 표현하는 방식입니다.
우리가 평소에 쓰는 숫자는 10진법입니다.
10진법은 숫자 10개를 씁니다.
0, 1, 2, 3, 4, 5, 6, 7, 8, 99 다음에는 새로운 숫자가 없으니까 자리올림을 해서 10이 됩니다.
9 다음 → 10즉, 10진법은 10이 되면 자리올림하는 방식입니다.
컴퓨터는 왜 2진수를 쓰는가?
컴퓨터는 전기로 움직입니다.
전기는 크게 두 상태로 나눌 수 있습니다.
| 전기 상태 | 컴퓨터 표현 |
|---|---|
| 꺼짐 | 0 |
| 켜짐 | 1 |
그래서 컴퓨터는 복잡한 10진수보다 0과 1만 사용하는 2진수를 씁니다.
2진수는 숫자 2개만 씁니다.
0, 11 다음에는 새로운 숫자가 없으니까 자리올림을 합니다.
1 다음 → 10주의해라.
2진수의 10은 십이 아니라 2입니다.
| 10진수 | 2진수 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
| 8 | 1000 |
비트와 바이트
컴퓨터에서 가장 작은 정보 단위는 비트입니다.
비트 = 0 또는 1 하나
0 → 1비트
1 → 1비트
1010 → 4비트그리고 8비트를 모으면 1바이트입니다.
1바이트 = 8비트01000001이것은 8비트이므로 1바이트입니다.
논리회로 예시문제에도 “10진법 한 자리를 나타내기 위해 필요한 2진수 자릿수”를 묻는 문제가 있습니다. 정답은 4비트입니다. 3비트로는 000부터 111, 즉 0부터 7까지만 표현할 수 있고, 10진수 한 자리인 0부터 9까지 표현하려면 4비트가 필요하기 때문입니다.
자리값 이해하기
진법 변환을 하려면 자리값을 알아야 합니다.
10진수 347을 살펴보겠습니다.
347 = 3×100 + 4×10 + 7×1347 = 3×10² + 4×10¹ + 7×10⁰10진수는 자리값이 이렇게 갑니다.
... 1000, 100, 10, 1... 10³, 10², 10¹, 10⁰그러면 2진수는?
2진수는 자리값이 이렇게 갑니다.
... 8, 4, 2, 1... 2³, 2², 2¹, 2⁰진법 변환
2진수를 10진수로 바꾸기
예를 들어 2진수 1011을 10진수로 바꿔 보겠습니다.
1011₂자리값을 붙이면 다음과 같습니다.
| 자리 | 1 | 0 | 1 | 1 |
|---|---|---|---|---|
| 값 | 8 | 4 | 2 | 1 |
이제 1이 있는 자리만 더합니다.
1×8 + 0×4 + 1×2 + 1×1
= 8 + 0 + 2 + 1
= 111011₂ = 11₁₀아래첨자 ₂, ₁₀은 각각 2진수, 10진수라는 뜻입니다.
예제 1
1101₂를 10진수로 바꿔라.
자리값은 다음과 같습니다.
| 자리 | 1 | 1 | 0 | 1 |
|---|---|---|---|---|
| 값 | 8 | 4 | 2 | 1 |
1×8 + 1×4 + 0×2 + 1×1
= 8 + 4 + 0 + 1
= 131101₂ = 13₁₀10진수를 2진수로 바꾸기
이번에는 반대로 해 보겠습니다.
10진수 13을 2진수로 바꾸는 방법입니다.
가장 기본적인 방법은 2로 계속 나누고, 나머지를 거꾸로 읽기입니다.
13 ÷ 2 = 6 ... 1
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1나머지를 아래에서 위로 읽습니다.
110113₁₀ = 1101₂예제 2
25₁₀을 2진수로 바꿔라.
25 ÷ 2 = 12 ... 1
12 ÷ 2 = 6 ... 0
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1나머지를 거꾸로 읽습니다.
1100125₁₀ = 11001₂8진수와 16진수는 왜 쓰는가?
2진수는 컴퓨터 입장에서는 좋지만, 사람이 보기에는 너무 깁니다.
1101011010110010이러한 내용을 사람이 계속 읽으면 헷갈리기 쉽습니다.
그래서 2진수를 짧게 표현하기 위해 8진수와 16진수를 씁니다.
| 진법 | 사용하는 숫자 | 특징 |
|---|---|---|
| 2진수 | 0, 1 | 컴퓨터가 실제로 쓰는 표현 |
| 8진수 | 0~7 | 2진수 3자리씩 묶음 |
| 10진수 | 0~9 | 사람이 평소 쓰는 표현 |
| 16진수 | 0 | 2진수 4자리씩 묶음 |
16진수에서는 숫자가 10개를 넘어가므로 알파벳을 씁니다.
| 10진수 | 16진수 |
|---|---|
| 10 | A |
| 11 | B |
| 12 | C |
| 13 | D |
| 14 | E |
| 15 | F |
2진수 ↔ 8진수
8은 2의 3제곱입니다.
8 = 2³그래서 2진수를 8진수로 바꿀 때는 오른쪽부터 3자리씩 묶습니다.
11010110₂오른쪽부터 3자리씩 묶습니다.
11 010 110맨 왼쪽이 3자리가 안 되면 앞에 0을 붙입니다.
011 010 110이제 각 묶음을 10진수처럼 읽습니다.
| 2진수 묶음 | 값 |
|---|---|
| 011 | 3 |
| 010 | 2 |
| 110 | 6 |
11010110₂ = 326₈2진수 ↔ 16진수
16은 2의 4제곱입니다.
16 = 2⁴그래서 2진수를 16진수로 바꿀 때는 오른쪽부터 4자리씩 묶습니다.
11010110₂오른쪽부터 4자리씩 묶습니다.
1101 0110각 묶음을 16진수로 바꿉니다.
| 2진수 묶음 | 10진수 값 | 16진수 |
|---|---|---|
| 1101 | 13 | D |
| 0110 | 6 | 6 |
11010110₂ = D6₁₆꼭 외워야 하는 4비트 표
이 표는 반드시 정리해 둡니다. 2진수, 10진수, 16진수가 계속 연결됩니다.
| 2진수 | 10진수 | 16진수 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | 10 | A |
| 1011 | 11 | B |
| 1100 | 12 | C |
| 1101 | 13 | D |
| 1110 | 14 | E |
| 1111 | 15 | F |
이 표를 알면 16진수 변환이 빨라집니다.
2진수 연산
2진수 덧셈
컴퓨터가 계산할 때는 2진수 덧셈을 합니다.
규칙은 간단합니다.
| 계산 | 결과 |
|---|---|
| 0 + 0 | 0 |
| 0 + 1 | 1 |
| 1 + 0 | 1 |
| 1 + 1 | 10 |
| 1 + 1 + 1 | 11 |
여기서 1 + 1 = 10이라는 점이 중요합니다.
2진수에서 10은 2라는 뜻입니다.
그래서 1과 1을 더하면 0을 쓰고, 1을 다음 자리로 올립니다.
예제 3
0101
+ 0011
------오른쪽부터 계산합니다.
1 + 1 = 10 → 0 쓰고 1 올림
0 + 1 + 올림1 = 10 → 0 쓰고 1 올림
1 + 0 + 올림1 = 10 → 0 쓰고 1 올림
0 + 0 + 올림1 = 1 0101
+ 0011
------
10005 + 3 = 8정수 표현
부호 없는 수와 부호 있는 수
여기서부터 중요합니다.
같은 2진수라도 해석 방법에 따라 값이 달라질 수 있습니다.
예를 들어 4비트 1111을 살펴보겠습니다.
부호 없는 수로 해석하면
부호 없는 수는 전부 양수로 봅니다.
1111₂ = 15₁₀부호 있는 수로 해석하면
부호 있는 수는 양수와 음수를 모두 표현합니다.
1111₂ = -1즉, 같은 1111이라도 상황에 따라 다릅니다.
| 비트열 | 부호 없는 수 | 4비트 2의 보수 |
|---|---|---|
| 1111 | 15 | -1 |
이것이 진짜 중요합니다.
비트 자체가 의미를 정하는 것이 아니라, 해석 방식이 의미를 정합니다.
4비트로 표현 가능한 범위
4비트는 총 몇 가지를 표현할 수 있을까요?
각 비트는 0 또는 1, 두 가지 상태를 가집니다.
2⁴ = 16가지그래서 4비트는 총 16개 값을 표현할 수 있습니다.
부호 없는 수
0000 ~ 11110 ~ 15| 비트 수 | 부호 없는 수 범위 |
|---|---|
| 4비트 | 0 ~ 15 |
| 8비트 | 0 ~ 255 |
2⁸ = 256가지그래서 0부터 255까지입니다.
부호 있는 수, 2의 보수
4비트로 음수까지 표현하면 범위가 달라집니다.
-8 ~ +7왜냐하면 총 16개 값을 절반 정도는 음수, 절반 정도는 0과 양수에 쓰기 때문입니다.
| 비트 수 | 2의 보수 표현 범위 |
|---|---|
| 4비트 | -8 ~ +7 |
| 8비트 | -128 ~ +127 |
시험에서 4비트, 8비트라는 말이 나오면 반드시 범위를 조심해야 합니다.
보수와 음수 계산
컴퓨터가 음수를 표현하는 방법
컴퓨터는 - 기호를 직접 저장하지 않습니다.
사람은 이렇게 씁니다.
-5하지만 컴퓨터는 0과 1만 저장할 수 있습니다. 그래서 음수를 표현하는 규칙이 필요합니다.
대표적인 방법은 세 가지입니다.
| 방법 | 설명 |
|---|---|
| 부호-크기 방식 | 맨 앞 비트를 부호로 사용 |
| 1의 보수 | 모든 비트를 반대로 바꿈 |
| 2의 보수 | 1의 보수에 1을 더함 |
시험에서 가장 중요한 것은 2의 보수입니다.
1의 보수
1의 보수는 간단합니다.
0은 1로, 1은 0으로 바꿉니다.
예를 들어 4비트 0101이 있습니다.
010110100101의 1의 보수 = 10102의 보수
2의 보수는 이렇게 구합니다.
1단계: 모든 비트를 반대로 바꿉니다.
2단계: 1을 더합니다.예를 들어 4비트에서 5를 음수 -5로 표현해 보겠습니다.
먼저 5를 2진수로 씁니다.
5 = 01011단계: 1의 보수를 구합니다.
0101 → 10102단계: 1을 더합니다.
1010
+ 1
-----
1011-5 = 10112의 보수 빠르게 구하는 방법
시험장에서 빠르게 하려면 이 방법을 써도 됩니다.
오른쪽에서부터 처음 나오는 1까지는 그대로 두고, 그 왼쪽 비트들을 전부 반대로 바꿉니다.
0101오른쪽에서 처음 나오는 1은 맨 오른쪽입니다.
그 1은 그대로 둡니다.
왼쪽의 010은 반대로 바꿉니다.
0101 → 10110101의 2의 보수 = 1011다만 처음에는 정석 방법을 추천합니다.
비트 반전 + 1이것을 확실히 알아야 합니다.
2의 보수로 뺄셈하기
컴퓨터는 뺄셈도 덧셈으로 처리할 수 있습니다.
4 - 5이것은 이렇게 바꿀 수 있습니다.
4 + (-5)컴퓨터는 -5를 2의 보수로 표현한 뒤 더합니다.
이 내용은 컴퓨터구조 예시문제에도 그대로 나옵니다. 4비트 이진수로 4 - 5를 계산할 때, 4는 0100, 5는 0101, 5의 2의 보수는 1011, 결과는 1111입니다.
예제 4: 4비트로 4 - 5 계산하기
먼저 4와 5를 4비트로 씁니다.
4 = 0100
5 = 0101이제 5의 2의 보수를 구합니다.
1단계: 5의 비트를 반대로 바꿉니다.
0101 → 10102단계: 1을 더합니다.
1010
+ 1
-----
1011-5 = 1011이제 4 + (-5)를 계산합니다.
0100
+ 1011
------
111111114비트 2의 보수에서 1111은 -1입니다.
4 - 5 = -1왜 1111이 -1인가?
이 부분이 헷갈릴 수 있습니다.
4비트 2의 보수에서 양수와 음수는 이렇게 나뉩니다.
| 2진수 | 값 |
|---|---|
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | -8 |
| 1001 | -7 |
| 1010 | -6 |
| 1011 | -5 |
| 1100 | -4 |
| 1101 | -3 |
| 1110 | -2 |
| 1111 | -1 |
맨 앞 비트가 0이면 0 또는 양수입니다.
0xxx → 0 이상맨 앞 비트가 1이면 음수입니다.
1xxx → 음수단, 이것은 2의 보수 방식으로 해석할 때의 이야기입니다.
음수 값을 빠르게 읽는 방법
예를 들어 4비트 1101이 있습니다.
맨 앞이 1이므로 음수입니다.
값을 알고 싶으면 다시 2의 보수를 구하면 됩니다.
11011단계: 비트 반전
00102단계: 1 더하기
0010 + 1 = 00110011은 3입니다.
1101 = -32의 보수 음수 읽기:
비트 반전 + 1 → 절댓값
앞에 - 붙이기8비트 예제
이번에는 8비트로 -12를 표현해 보겠습니다.
먼저 12를 8비트로 씁니다.
12 = 000011001단계: 비트 반전
111100112단계: 1 더하기
11110011
+ 1
--------
11110100-12 = 11110100오버플로우와 비교 정리
오버플로우
오버플로우는 표현 가능한 범위를 넘는 것입니다.
-8 ~ +7그런데 4비트로 7 + 1을 해 보겠습니다.
0111
+ 0001
------
1000겉보기 결과는 1000입니다.
그런데 4비트 2의 보수에서 1000은 -8입니다.
7 + 1 = 88은 4비트 2의 보수 범위 -8 ~ +7에 없습니다.
그래서 오버플로우가 발생합니다.
오버플로우 = 정해진 비트 수로 표현할 수 있는 범위를 넘어선 것
이번 절의 핵심 비교표
| 개념 | 핵심 |
|---|---|
| 2진수 | 0과 1만 사용 |
| 8진수 | 0~7 사용, 2진수 3자리씩 묶음 |
| 10진수 | 0~9 사용, 우리가 평소 쓰는 수 |
| 16진수 | 0 |
| 비트 | 0 또는 1 하나 |
| 바이트 | 8비트 |
| 1의 보수 | 0과 1을 반대로 바꿈 |
| 2의 보수 | 1의 보수에 1을 더함 |
| 부호 없는 수 | 전부 0 이상의 수로 해석 |
| 부호 있는 수 | 양수와 음수를 함께 표현 |
| 오버플로우 | 표현 범위를 초과함 |
자주 혼동되는 출제 포인트
혼동 포인트 1: 2진수 10은 십이 아닙니다
10₂ = 2₁₀혼동 포인트 2: 앞의 0은 값에는 영향이 없습니다
101₂ = 0101₂ = 00000101₂전부 10진수로 5다.
하지만 비트 수가 정해진 문제에서는 앞의 0도 중요합니다.
4비트로 표현하시오 → 0101
8비트로 표현하시오 → 00000101혼동 포인트 3: 같은 비트열도 해석에 따라 다릅니다
1111| 해석 | 값 |
|---|---|
| 부호 없는 4비트 | 15 |
| 부호 있는 4비트 2의 보수 | -1 |
혼동 포인트 4: 2의 보수는 “반전하고 1 더하기”입니다
0101의 2의 보수
→ 1010
→ 1011혼동 포인트 5: 16진수는 4비트씩 묶습니다
10101111₂
= 1010 1111
= AF₁₆이번 절의 핵심 한 문장
이번 절의 핵심을 한 문장으로 정리하면 다음과 같습니다.
컴퓨터는 모든 수를 0과 1로 표현하고, 음수는 주로 2의 보수 방식으로 표현해서 뺄셈도 덧셈처럼 처리합니다.
2진수 = 컴퓨터의 숫자
2의 보수 = 컴퓨터가 음수를 표현하는 대표 방법확인 문제
문제 1
1010₂를 10진수로 바꾸면?
① 8 ② 9 ③ 10 ④ 11
문제 2
13₁₀을 2진수로 바꾸면?
① 1011 ② 1101 ③ 1110 ④ 1001
문제 3
2진수 11010110₂을 16진수로 바꾸면?
① D6 ② C6 ③ D5 ④ A6
문제 4
4비트 2의 보수에서 0101의 음수 표현, 즉 -5는?
① 0101 ② 1010 ③ 1011 ④ 1101
문제 5
4비트 2의 보수에서 1111의 값은?
① 15 ② -1 ③ -7 ④ 0
문제 6
4비트 2의 보수에서 4 - 5를 계산한 결과는?
① 0001 ② 1111 ③ 1010 ④ 0111
정답과 해설은 절별 확인문제 정답해설에서 확인합니다.
다음 1장 3절은 명제논리, 부울대수, 논리게이트입니다. 거기서 이번 절에서 배운 0과 1이 참/거짓, AND/OR/NOT 회로로 이어집니다.