이진수 중, 0
으로 시작하는 수는 양수, 1
로 시작하는 수는 음수이다. 이러한 방식을 2의 보수 표현법(two's complement)이라 부른다.
이진수의 연산에서, 작은 수에서 큰 수를 빼면, 0
으로 시작하는 수에서 빌림을 수행하여, 1
로 시작하는 수가 된다.
0011 1000 - 0100 0111 = 1111 0001
11 11
0011 1000
- 0100 0111
-----------
1111 0001
- 모든 비트를 역전한다.
1
two을 더한다.
16비트 이진수 2
ten와 -2
ten를 32비트 이진수로 변환하라.
two ten
--- ---
0000 0000 0000 0010 2
최상위 비트(0
)를 취해서 워드의 왼쪽 부분에 16번 복사하고, 워드의 오른쪽 부분에는 원래의 값을 그대로 복사해서 32비트 이진수를 만들 수 있다.
two ten
--- ---
0000 0000 0000 0000 0000 0000 0000 0010 2
16비트 이진수 2
를 앞의 빠른 계산방법으로 역부호화하여 -2
를 만들자.
two ten
--- ---
1111 1111 1111 1101 -2
음수를 32비트로 변환하려면 부호 비트를 16번 복사하여 왼쪽에 넣는다.
two ten
--- ---
1111 1111 1111 1111 1111 1111 1111 1110 -2
- 2의 보수에는 대응되는 양수가 없는 음수
-2,147,483,648
ten이 있다. 이는 음수와 양수 사이에0
ten이 존재하기 때문이다. (짝을 지으면,-2,147,483,648
의 짝은0
이다.)
two ten
--- ---
0000 0000 0000 0000 0000 0000 0000 0000 0
0000 0000 0000 0000 0000 0000 0000 0001 1
0000 0000 0000 0000 0000 0000 0000 0010 2
... ...
0111 1111 1111 1111 1111 1111 1111 1101 2,147,483,645
0111 1111 1111 1111 1111 1111 1111 1110 2,147,483,646
0111 1111 1111 1111 1111 1111 1111 1111 2,147,483,647
1000 0000 0000 0000 0000 0000 0000 0000 -2,147,483,648
1000 0000 0000 0000 0000 0000 0000 0001 -2,147,483,647
1000 0000 0000 0000 0000 0000 0000 0010 -2,147,483,646
... ...
1111 1111 1111 1111 1111 1111 1111 1101 -3
1111 1111 1111 1111 1111 1111 1111 1110 -2
1111 1111 1111 1111 1111 1111 1111 1111 -1
- David A. Patterson, John L. Hennessy. (2015). 컴퓨터 구조 및 설계 (5판) (박명순, 김병기, 하순회, 장 훈 역) (pp. 78-84). 서울: 한티미디어. (원서출판 2015).