비트를 사용해 수를 표현하는 방법을 알아보자.
수는 논리보다 더 복잡하지만 단어보다 훨씬 단순하다.
음수와 양수를 구별하기 위해 부호(sign)을 사용한다. 부호에는 양부호(+)와 음부호(-)라는 두 가지 값이 있다. 이를 비트 하나를 사용해 표현한다.
4비트를 쓴다고 가정한다면, MSB에 부호를 사용하고 나머지 3비트로 0부터 7까지의 수를 표현할 수 있다.
부호 비트가 0이면 2진수를 양수로 취급하고 부호 비트가 1이면 2진수를 음수로 취급한다.
그런데 부호와 크기 표현법은 두 가지 이유로 인해 널리 안쓰인다.
첫째, 0을 표현하는 방법이 두 가지라서 비용이 낭비된다.
둘째, 부호와 크기 표현법을 사용하면 XOR과 AND를 통한 덧셈 계산을 사용할 수가 없다.
+1(0001)과 -1(1001)을 더하면 0이 되리라 예상하겠지만 실제로 부호와 크기 표현법으로 XOR과 AND 산술 방식으로 계산하면 -2(1010)이 나온다.
-2는 +1과 -1을 더한 값이 아니다.
그런데 1의 보수 표현법에도 0을 두 가지 방식으로 표현한다는 문제가 여전히 존재한다. 게다가 1의 보수에서도 덧셈을 쉽게 할 수는 없다. 덧셈을 하려면 순환 올림(MSB쪽에서 올림이 발생하는 경우 LSB로 올림을 전달해야함)을 해야 한다.
이 방식은 잘 작동하기는 하지만 순환 올림을 처리하기 위한 하드웨어를 추가해야 하기 때문에 좋은 방법이 아니다.
현대 컴퓨터에서는 부호와 크기 표현법이나 1의 보수 표현법을 모두 사용하지 않는다. 이 두 방식을 사용한 계산은 추가적인 하드웨어 없이는 제대로 작동할 수 없고, 하드웨어를 추가한다는 말은 비용이 더 든다는 뜻이다.
2의 보수 표현법에는 0을 표현하는 방법이 하나뿐이다.
양수 0의 0000을 뒤집으면 1111을 얻는다. 1111에 1을 더하면 [1]0000이 되는데 1을 올림 비트로 생각하고 무시한다. 따라서 음수 0은 0000이 되며, 양수 0과 똑같다.