안동민 개발노트 아이콘

안동민 개발노트

1장 : 학습 전략과 이산수학·논리회로

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, 9

9 다음에는 새로운 숫자가 없으니까 자리올림을 해서 10이 됩니다.

9 다음 → 10

즉, 10진법은 10이 되면 자리올림하는 방식입니다.


컴퓨터는 왜 2진수를 쓰는가?

컴퓨터는 전기로 움직입니다.

전기는 크게 두 상태로 나눌 수 있습니다.

전기 상태컴퓨터 표현
꺼짐0
켜짐1

그래서 컴퓨터는 복잡한 10진수보다 0과 1만 사용하는 2진수를 씁니다.

2진수는 숫자 2개만 씁니다.

0, 1

1 다음에는 새로운 숫자가 없으니까 자리올림을 합니다.

1 다음 → 10

주의해라. 2진수의 10은 십이 아니라 2입니다.

10진수2진수
00
11
210
311
4100
5101
6110
7111
81000

비트와 바이트

컴퓨터에서 가장 작은 정보 단위는 비트입니다.

비트 = 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×1
조금 더 수학적으로 쓰면
347 = 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₂

자리값을 붙이면 다음과 같습니다.

자리1011
8421

이제 1이 있는 자리만 더합니다.

1×8 + 0×4 + 1×2 + 1×1
= 8 + 0 + 2 + 1
= 11
그래서
1011₂ = 11₁₀

아래첨자 , ₁₀은 각각 2진수, 10진수라는 뜻입니다.


예제 1

1101₂를 10진수로 바꿔라.

자리값은 다음과 같습니다.

자리1101
8421
계산
1×8 + 1×4 + 0×2 + 1×1
= 8 + 4 + 0 + 1
= 13
정답
1101₂ = 13₁₀

10진수를 2진수로 바꾸기

이번에는 반대로 해 보겠습니다.

10진수 13을 2진수로 바꾸는 방법입니다.

가장 기본적인 방법은 2로 계속 나누고, 나머지를 거꾸로 읽기입니다.

13 ÷ 2 = 6 ... 1
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1

나머지를 아래에서 위로 읽습니다.

1101
따라서
13₁₀ = 1101₂

예제 2

25₁₀을 2진수로 바꿔라.

25 ÷ 2 = 12 ... 1
12 ÷ 2 = 6 ... 0
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1

나머지를 거꾸로 읽습니다.

11001
정답
25₁₀ = 11001₂

8진수와 16진수는 왜 쓰는가?

2진수는 컴퓨터 입장에서는 좋지만, 사람이 보기에는 너무 깁니다.

예를 들어
1101011010110010

이러한 내용을 사람이 계속 읽으면 헷갈리기 쉽습니다.

그래서 2진수를 짧게 표현하기 위해 8진수16진수를 씁니다.

진법사용하는 숫자특징
2진수0, 1컴퓨터가 실제로 쓰는 표현
8진수0~72진수 3자리씩 묶음
10진수0~9사람이 평소 쓰는 표현
16진수09, AF2진수 4자리씩 묶음

16진수에서는 숫자가 10개를 넘어가므로 알파벳을 씁니다.

10진수16진수
10A
11B
12C
13D
14E
15F

2진수 ↔ 8진수

8은 2의 3제곱입니다.

8 = 2³

그래서 2진수를 8진수로 바꿀 때는 오른쪽부터 3자리씩 묶습니다.

예를 들어
11010110₂

오른쪽부터 3자리씩 묶습니다.

11 010 110

맨 왼쪽이 3자리가 안 되면 앞에 0을 붙입니다.

011 010 110

이제 각 묶음을 10진수처럼 읽습니다.

2진수 묶음
0113
0102
1106
그래서
11010110₂ = 326₈

2진수 ↔ 16진수

16은 2의 4제곱입니다.

16 = 2⁴

그래서 2진수를 16진수로 바꿀 때는 오른쪽부터 4자리씩 묶습니다.

예를 들어
11010110₂

오른쪽부터 4자리씩 묶습니다.

1101 0110

각 묶음을 16진수로 바꿉니다.

2진수 묶음10진수 값16진수
110113D
011066
그래서
11010110₂ = D6₁₆

꼭 외워야 하는 4비트 표

이 표는 반드시 정리해 둡니다. 2진수, 10진수, 16진수가 계속 연결됩니다.

2진수10진수16진수
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F

이 표를 알면 16진수 변환이 빨라집니다.


2진수 연산

2진수 덧셈

컴퓨터가 계산할 때는 2진수 덧셈을 합니다.

규칙은 간단합니다.

계산결과
0 + 00
0 + 11
1 + 01
1 + 110
1 + 1 + 111

여기서 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
------
  1000
5 + 3 = 8

정수 표현

부호 없는 수와 부호 있는 수

여기서부터 중요합니다.

같은 2진수라도 해석 방법에 따라 값이 달라질 수 있습니다.

예를 들어 4비트 1111을 살펴보겠습니다.

부호 없는 수로 해석하면

부호 없는 수는 전부 양수로 봅니다.

1111₂ = 15₁₀

부호 있는 수로 해석하면

부호 있는 수는 양수와 음수를 모두 표현합니다.

4비트 2의 보수 방식에서는
1111₂ = -1

즉, 같은 1111이라도 상황에 따라 다릅니다.

비트열부호 없는 수4비트 2의 보수
111115-1

이것이 진짜 중요합니다.

비트 자체가 의미를 정하는 것이 아니라, 해석 방식이 의미를 정합니다.

4비트로 표현 가능한 범위

4비트는 총 몇 가지를 표현할 수 있을까요?

각 비트는 0 또는 1, 두 가지 상태를 가집니다.

2⁴ = 16가지

그래서 4비트는 총 16개 값을 표현할 수 있습니다.

부호 없는 수

4비트를 전부 양수로 쓰면
0000 ~ 1111
값은
0 ~ 15
비트 수부호 없는 수 범위
4비트0 ~ 15
8비트0 ~ 255
8비트는
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이 있습니다.

0101
모든 비트를 반대로 바꾸면
1010
따라서
0101의 1의 보수 = 1010

2의 보수

2의 보수는 이렇게 구합니다.

1단계: 모든 비트를 반대로 바꿉니다.
2단계: 1을 더합니다.

예를 들어 4비트에서 5를 음수 -5로 표현해 보겠습니다.

먼저 5를 2진수로 씁니다.

5 = 0101

1단계: 1의 보수를 구합니다.

0101 → 1010

2단계: 1을 더합니다.

1010
+   1
-----
1011
따라서 4비트 2의 보수에서
-5 = 1011

2의 보수 빠르게 구하는 방법

시험장에서 빠르게 하려면 이 방법을 써도 됩니다.

오른쪽에서부터 처음 나오는 1까지는 그대로 두고, 그 왼쪽 비트들을 전부 반대로 바꿉니다.
예를 들어
0101

오른쪽에서 처음 나오는 1은 맨 오른쪽입니다. 그 1은 그대로 둡니다. 왼쪽의 010은 반대로 바꿉니다.

0101 → 1011
그래서
0101의 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 → 1010

2단계: 1을 더합니다.

1010
+   1
-----
1011
따라서
-5 = 1011

이제 4 + (-5)를 계산합니다.

  0100
+ 1011
------
  1111
결과는
1111

4비트 2의 보수에서 1111-1입니다.

따라서
4 - 5 = -1

왜 1111이 -1인가?

이 부분이 헷갈릴 수 있습니다.

4비트 2의 보수에서 양수와 음수는 이렇게 나뉩니다.

2진수
00000
00011
00102
00113
01004
01015
01106
01117
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의 보수를 구하면 됩니다.

1101

1단계: 비트 반전

0010

2단계: 1 더하기

0010 + 1 = 0011

0011은 3입니다.

따라서 원래 수는
1101 = -3
2의 보수 음수 읽기:
비트 반전 + 1 → 절댓값
앞에 - 붙이기

8비트 예제

이번에는 8비트로 -12를 표현해 보겠습니다.

먼저 12를 8비트로 씁니다.

12 = 00001100

1단계: 비트 반전

11110011

2단계: 1 더하기

11110011
+       1
--------
11110100
따라서 8비트 2의 보수에서
-12 = 11110100

오버플로우와 비교 정리

오버플로우

오버플로우는 표현 가능한 범위를 넘는 것입니다.

예를 들어 4비트 부호 있는 2의 보수 범위는
-8 ~ +7

그런데 4비트로 7 + 1을 해 보겠습니다.

  0111
+ 0001
------
  1000

겉보기 결과는 1000입니다.

그런데 4비트 2의 보수에서 1000-8입니다.

하지만 실제 계산은
7 + 1 = 8

8은 4비트 2의 보수 범위 -8 ~ +7에 없습니다.

그래서 오버플로우가 발생합니다.

오버플로우 = 정해진 비트 수로 표현할 수 있는 범위를 넘어선 것

이번 절의 핵심 비교표

개념핵심
2진수0과 1만 사용
8진수0~7 사용, 2진수 3자리씩 묶음
10진수0~9 사용, 우리가 평소 쓰는 수
16진수09, AF 사용, 2진수 4자리씩 묶음
비트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 회로로 이어집니다.