seegongsik
구조

마이너스랑 3.14는 어떻게 담을까요?

지금까지는 0, 1, 2 같은 양의 정수만 담았다. 그렇다면 영하 5도나 마이너스 잔액, 3.14 같은 수는 어떻게 0과 1로 담을까? 여기에는 영리한 방법이 두 가지 있어요.

01

맨 앞 스위치 하나를 부호로

음수를 담는 첫 번째 생각은 단순하다.
스위치 하나를 떼어 부호 전용으로 쓰는 것이다.
맨 앞자리가 0이면 양수, 1이면 음수로 정하고, 나머지 스위치로 크기를 나타내요.

부호
0
64
0
32
0
16
0
8
0
4
1
2
0
1
1
읽으면+5

맨 앞 칸이 부호, 나머지 칸이 크기를 맡는다.

맨 앞 칸만 바꾸면 +5가 -5로 바뀐다.
간단하지만 불편한 점이 있다.
계산할 때마다 부호를 따로 챙겨야 하고, 0이 두 개나 생겨요.
+0과 -0 두 가지다.

02

한 바퀴 돌려서 음수 만들기

그래서 컴퓨터가 실제로 쓰는 방법은 조금 더 영리하다.
자동차 주행거리계를 떠올리면 쉽다.
9999에서 1을 더 가면 0000으로 넘어가요.
거꾸로 0에서 1을 빼면 맨 끝 숫자로 돌아간다.
이 성질을 이용해 맨 끝 쪽 숫자들을 음수로 쓰기로 한 것이다.

0
0000 0000
-1280+127

같은 비트라도 한 바퀴 돌아간 자리는 음수로 읽는다.

이 방법을 2의 보수라고 부른다.
좋은 점은 음수를 더할 때도 평범하게 더하기만 하면 덧셈 회로가 알아서 맞는 답을 낸다는 것이다.
빼기 회로를 따로 만들지 않아도 되니, 컴퓨터는 이 방법을 택했어요.

03

소수점은 떠다닌다

이번에는 3.14 같은 소수다.
비밀은 이름에 들어 있다. 소수점이 한자리에 고정되지 않고 떠다닌다.
같은 숫자라도 점을 어디에 찍느냐에 따라 큰 수도 작은 수도 나타낼 수 있어요.
아래에서 314라는 숫자 사이로 점을 옮길 수 있다.

3.14
지금 값은 3.14

점을 옮기면 같은 숫자가 다른 값이 된다.

점이 왼쪽으로 가면 수가 작아지고, 오른쪽으로 가면 커진다.
소수점이 이렇게 떠다니기 때문에 아주 큰 수부터 아주 작은 수까지 같은 방식으로 담을 수 있어요.
그래서 이름이 부동소수점, 곧 떠다니는 소수점이다.

04

부호, 점의 위치, 숫자로 나누기

그렇다면 떠다니는 소수점은 어떻게 0과 1로 담을까?
스위치를 세 구역으로 나눈다.
맨 앞은 앞에서 본 부호, 가운데는 소수점의 위치(수가 얼마나 큰지), 나머지는 실제 숫자예요.

부호
소수점 위치
실제 숫자
부호 · 양수냐 음수냐 (1칸)
소수점 위치 · 점이 어디 떠 있나 (몇 칸)
실제 숫자 · 알맹이 (나머지)

스위치를 세 구역으로 나눠 담는다.

이 세 조각만 있으면 소수점이 어디에 있든 어떤 수라도 0과 1로 적을 수 있다.
과학에서 쓰는 지수 표기법과 같은 생각이다.
3.14를 0.314 곱하기 10으로 쪼개는 것과 비슷해요.

05

컴퓨터가 0.1을 정확히 담지 못할 때

재미있는 사실 하나로 마무리한다.
컴퓨터에게 0.1 더하기 0.2를 시키면 딱 0.3이 나오지 않을 때가 있다.
아주 조금 어긋나는데, 0.1은 0과 1로 딱 떨어지게 담을 수 없기 때문이에요.

0.1 + 0.2 = 0.30000000000000004

우리 눈에는 0.3이지만, 컴퓨터 속에는 아주 작은 오차가 남는다.

1 나누기 3을 십진법으로 쓰면 0.3333...처럼 끝없이 이어진다.
0.1도 0과 1의 세계에서는 끝없이 이어지는 수다.
그래서 어딘가에서 잘라야 하고, 거기서 아주 작은 오차가 생겨요.
컴퓨터가 틀린 것이 아니라 0과 1로 소수를 담는 방식이 가진 한계다.

한 줄 정리음수는 부호 스위치와 한 바퀴 돌리기로, 소수는 떠다니는 소수점으로 담았다. 마이너스도 3.14도 결국 약속을 하나 더 얹은 0과 1이에요.
← 구조
이 페이지가 도움 됐다면 후원하기