Coding Log


컴퓨터의 정수 표현

2진수밖에 모르는 컴퓨터가 어떻게 숫자를 표현할까?

특정 코드를 문자별로 부여한 문자 코드 체계와는 다르게 숫자는 2진수 자체로 숫자를 저장하고 계산하며, 표현만 사람이 인지하기 쉬운 10진수로 표시한다.

숫자를 정수와 실수로 나누어 어떻게 표현하는지 알아보자.

정수 표현

사람이 숫자를 표현할 때는 아래와 같이 표현할 수 있다.

123
12345678901234567890
-12345678901234567890

위처럼 일반적인 실생활에선 굳이 자릿수에 영향을 받지 않지만 컴퓨터는 엄연히 데이터를 저장하는 것이기 때문에 이 저장할 수 있는 데이터의 크기가 한계가 존재한다.

컴퓨터는 일반적으로 정수를 32bit로 표현한다.

참고 64bit 운영체제의 컴퓨터는 정수를 64bit로 표현한다.

대부분의 컴퓨터는 정수를 표현하기 위해 2의 보수 표기법을 사용한다.

참고 위키피디아의 2의 보수 문서

양수에 대한 2의 보수 표현

표현(16bit)
00000 0000 0000 0000
10000 0000 0000 0001
20000 0000 0000 0010
30000 0000 0000 0011
40000 0000 0000 0100
50000 0000 0000 0101
60000 0000 0000 0110
70000 0000 0000 0111

양수는 가장 왼쪽에 있는 비트(최상위 비트)를 0으로 쓰고 나머지 비트를 이용해 해당 값을 2진수로 표현한다.

음수에 대한 2의 보수 표현

표현(16bit)
-11111 1111 1111 1111
-21111 1111 1111 1110
-31111 1111 1111 1101
-41111 1111 1111 1100
-51111 1111 1111 1011
-61111 1111 1111 1010
-71111 1111 1111 1001
-81111 1111 1111 1000

음수는 양수의 2의 보수에서 0을 1로 1을 0으로 전부 바꾼 뒤 1을 더하면 된다.

예를 들어 양수 1을 2의 보수로 표현하면 0001이고 0을 1로 1을 0으로 바꾸면 1110이 된다. 여기서 1을 추가적으로 더하면 1111이 되어 음수 -1을 표현하는 2의 보수가 된다.

음수는 가장 왼쪽에 있는 최상위 비트를 1로 쓰고 나머지 비트를 이용해 해당 값을 2진수로 표현한다.

위에선 가독성을 위해 16bit를 기준으로 계산하였다.

어떤 수를 N bit로 표현한다면 N만큼의 bit로 표현할 수 있는 수의 범위는 아래와 같다.

-2^{n-1} ~ 2^{n-1} - 1

정수의 덧셈과 뺄셈

양수와 양수의 덧셈
4 + 5 = 12를 컴퓨터는 아래와 같이 나타낸다.

여기서도 16bit를 기준으로 표시하면 4와 5는 아래와 같다.

4_{(10)} = 0000 0000 0000 0100_{(2)}
5_{(10)} = 0000 0000 0000 0101_{(2)}

10진수의 덧셈도 각 자리수를 먼저 합한뒤 10이 넘어가면 그 윗자리에 1을 더해주는 것처럼 2진수의 계산도 똑같이 하면 된다.

\;\;\:0000 0000 0000 0100
+ 0000 0000 0000 0101
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
\;\;\:0000 0000 0000 1001

0000 0000 0000 1001_{(2)} = 9_{(10)}

진법 체계가 바뀌었을 뿐 일반적인 덧셈과 다른 점이 없다.

양수와 음수의 덧셈
4 - 5 = 4 + (-5) = -1을 컴퓨터는 아래와 같이 나타낸다.

4_{(10)} = 0000 0000 0000 0100_{(2)}
-5_{(10)} = 1111 1111 1111 1011_{(2)}

\;\;\:0000 0000 0000 0100
+ 1111 1111 1111 1011
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
\;\;\:1111 1111 1111 1111

1111 1111 1111 1111_{(2)} = -1_{(10)}

양수와 음수를 더할 땐 둘 다 2의 보수로 표현하여 계산한다.

이를 통해 컴퓨터는 뺄셈도 덧셈을 통해 계산한다는 것을 알 수 있다.

참고 컴퓨터는 뺄셈을 할 때 감산기가 아닌 가산기로 계산한다.

음수와 음수의 덧셈
-4 - 5 = (-4) + (-5) = -9을 컴퓨터는 아래와 같이 나타낸다.

-4_{(10)} = 1111 1111 1111 1100_{(2)}
-5_{(10)} = 1111 1111 1111 1011_{(2)}

\;\;\:1111 1111 1111 1100
+ 1111 1111 1111 1011
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
\;\,1 1111 1111 1111 0111

최상위 비트를 넘어가는 제일 앞의 1은 무시한다.

1111 1111 1111 1111_{(2)} = -9_{(10)}


DISQUS 로드 중…
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다