정수 표현
컴퓨터의 기억 공간은 제한적이므로 하나의 정수를 표현하기 위한 크기도 제한되어 있다.
요즘엔 64비트 시스템이 대다수지만, 이론서는 아직 32비트를 기준으로 많이 작성되므로 32비트를 기준으로 포스팅한다.
본 포스팅에서는 정수를 표현하는 대표적인 방법인 2의 보수 표기법에 대해서 알아보자.
쉬운 이해를 위해 32비트 대신 4비트로 공간을 더 제한해보자.
먼저 양수에 대한 2의 보수 표현식은 아래와 같다.
표현 | 값 |
---|---|
0111 | 7 |
0110 | 6 |
0101 | 5 |
0100 | 4 |
0011 | 3 |
0010 | 2 |
0001 | 1 |
0000 | 0 |
0부터 7까지 8개의 숫자를 표현하는 데에는 3비트면 충분한데 왜 4비트라고 할까?
이는 정수는 양수와 음수 즉, 부호를 같이 표기해야하기 때문이다.
위의 표에서 가장 왼쪽에 있는 비트가 전부 0으로 이루어진 것을 확인할 수 있는데, 이 0이 바로 양수를 뜻하는 비트이다.
이때 가장 왼쪽에 있는 이 비트를 최상위 비트 혹은 부호 비트라고 표현한다.
그럼 반대로 음수를 표현해보자.
음수를 표현하는 방밥은 아래와 같다.
- 표현하려는 음수의 양수를 비트로 표현한다.
- 각 비트를 반전한다. (0 -> 1, 1 -> 0)
- 1을 더한다.
-5를 표현하는 방법으로 예를 들어보자.
먼저 양수 5를 2진수로 표현하면 아래와 같다.
이후 각 비트를 반전한다.
반전한 비트에 1을 더하면 2의 보수 음수 표현이 된다.
음수에 대한 2의 보수 표현식도 표로 확인해보자.
표현 | 값 |
---|---|
1111 | -1 |
1110 | -2 |
1101 | -3 |
1100 | -4 |
1011 | -5 |
1010 | -6 |
1001 | -7 |
1000 | -8 |
양수 표현식과 다르게, 음수는 부호비트가 전부 1인 것을 알 수 있다.
참고 양수 표현에는 0이 포함되지만 음수 표현에는 포함되지않음을 상기하자.
4비트로 제한한 공간을 8비트로 확장하면 표현 범위는 아래와 같다.
표현 | 값 |
---|---|
0111 1111 | 127 |
0111 1110 | 126 |
0111 1101 | 125 |
… | … |
0000 0001 | 1 |
0000 0000 | 0 |
1111 1111 | -1 |
1111 1110 | -2 |
… | … |
1000 0001 | -127 |
1000 0000 | -128 |