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

같은 비트라도, 한 바퀴 돌리면 음수가 돼요.

이 방법을 보수라고 불러요.
좋은 점은,
음수를 더해도
그냥 평범하게 더하면
덧셈 회로가 알아서 맞는 답을 낸다는 거예요.
빼기를 따로 안 만들어도 되죠.
그래서 컴퓨터는 이 방법을 택했어요.

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이었어요.

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

이 페이지가 도움 됐다면 후원하기
구조