컴퓨터는 음수의 표현을 2의 보수법으로 표현한다. 2의 보수라는 말은 two's complement라는 말인데, 그다지 뜻이 와 닿지는 않는다. 왜 그럴까 하는 원리에 대해서 생각하게 해주는 책은 보지 못했다. 뭐 그래서 나름대로 그 원리를 정리해보려 한다.
내가 어린 시절에는 주산학원이 있었다. 나도 주산학원을 다녔었는데, '보수'라는 단어를 주산을 배울 때도 많이 썼는데, 뜻은 모르지만 뭐가 보수인지 어렴풋이 짐작은 했다. 즉 2의 보수라고 하면 8, 3의 보수는 7, 4의 보수는 6... 이런 식이다. 일반화 하자면 X의 보수는 더해서 10이 되는 수를 뜻한다.
그런데 내가 컴퓨터를 배우면서 2의보수라는 의미가 헷갈렸었다. 내가 알고 있는 2의 보수는 8이고, 주산을 배울 때의 맥락에서는 2진수에서는 1의 보수밖에 더 있을까?
컴퓨터 공학적인 의미의 보수의 의미는 비슷하지만 용어 해석이 좀 틀리다. 사실 용어해석이라기 보다는 나름대로 이해한 방법이라고 해두겠다.
위에서 말한 내용은 참고용으로만 기억해 두자.
2의 보수란 뜻은 2진수 X를 보완 해 준다는 의미인데,
예를 들어 110의 2의 보수라 하면 010고, 110 + 010 = 1000이 된다. (2진수 110을 보완해 주는 수)
101 또는 111 가 1000이 되기 위해 더해지는 수 011, 001이 각각의 2의 보수가 된다.
여기서 2+8=10일때 8이 보수가 되는 의미와 같다고 생각하면 된다.
즉 110 + 010 =1000 이고, 여기서 010이 보수가 된다.
그럼 1의 보수는 무엇인가?
1의 보수는 2의 보수를 좀 더 쉽게 쓰기 위해서 사용된다. 더해서 모두 1로 채워지는 수라는 뜻이다. 단순히 모든 비트들을 반전하면 1의 보수가 나온다.
110의 1의 보수는 001이다.
그리고 1의 보수와 2의 보수 간에는 다음이 성립한다.
1의 보수는 비트를 단순히 반전만 하면 되기 때문에 매우 효율적이다. 그래서 2의 보수를 한번에 구하는 방법보다, 1의 보수를 구한 후 1을 더하는 방법을 사용한다.
한줄 정리 : 컴퓨터의 음수 표현은 2의 보수법을 사용하는데, 2의 보수를 구하는 방법은 1의 보수 + 1로 간단하게 구할 수 있고, 1의 보수를 구하는 법은 비트를 반전시키면 된다.