1의 보수
IT 위키
- One's Complement
- 이진수의 모든 비트를 반전시켜 얻는 보수. n비트 수
N에 대해(2ⁿ − 1) − N과 같다.
컴퓨터가 뺄셈을 별도의 회로 없이 덧셈기만으로 처리하기 위해 쓰는 음수 표현 방식 중 하나다.
비트를 그대로 뒤집으면 된다. 0은 1로, 1은 0으로 바꾼다.
원래 값 : 0 0 1 0 1 1 0 0 (44) 1의 보수 : 1 1 0 1 0 0 1 1
A − B 를 A + (B의 1의 보수) 로 계산한다. 이때 맨 앞에서 올림(carry)이 발생하면 그 올림을 결과의 최하위 비트에 다시 더한다. 이를 순환 자리올림(end-around carry)이라 한다.
11110100 (−11) + 00100000 (+32 … 11011111 의 1의 보수) ----------- 1 00010100 ← 최상위에서 올림 발생 00010100 + 1 ← 순환 자리올림 ----------- 00010101 (+21)
X + Y = Z 에서 Y 를 구하려면 Y = Z − X = Z + (X의 1의 보수) 로 계산한다.
X = 11110100, Z = 11011111 일 때 11011111 (Z) + 00001011 (X 의 1의 보수) ----------- 11101010 ← 올림이 없으므로 그대로 답 Y = 11101010
검산하면 11110100 은 −11, 11011111 은 −32 이므로 Y = −32 − (−11) = −21 이고,
21(00010101)의 1의 보수가 11101010 이므로 값이 맞는다.
- 최상위 비트가 부호 비트다. 0이면 양수, 1이면 음수.
- 0이 두 가지로 표현된다. 8비트에서
00000000(+0)과11111111(−0)이 모두 0이다. 이것이 1의 보수의 가장 큰 단점이다. - n비트로 나타낼 수 있는 범위는
−(2ⁿ⁻¹ − 1)~+(2ⁿ⁻¹ − 1)이다. 8비트면 −127 ~ +127.
| 1의 보수 | 2의 보수 | |
|---|---|---|
| 구하는 법 | 모든 비트 반전 | 모든 비트 반전 후 1을 더함 |
| 0의 표현 | +0, −0 두 가지 | 하나뿐 |
| 8비트 표현 범위 | −127 ~ +127 | −128 ~ +127 |
| 뺄셈 시 처리 | 순환 자리올림이 필요 | 올림을 버리면 된다 |
| 실제 사용 | 초기 컴퓨터, 체크섬 계산 등 | 현대 컴퓨터의 표준 |
