컴퓨터는 0과 1만으로 모든 수 연산을 해야하므로 최대한 효율적인 수 표현방식을 갖고자 한다.
2진수 정수를 표현하는 방법에는 다음과 같은 세가지 방법이 있다.
1) 부호화 절댓값
2) 1의 보수
3) 2의보수
최상단 비트(MSB)만으로 부호를 표현하는 방식.
양수는 MSB가 0, 음수는 1로 표현한다.
양수(+) 표현
십진수 | +0 | +1 | +2 | ... | +127 |
---|---|---|---|---|---|
비트 | 0000 0000 | 0000 0001 | 0000 0010 | ... | 0111 1111 |
음수(-) 표현
십진수 | -0 | -1 | -2 | ... | -127 |
---|---|---|---|---|---|
비트 | 1000 0000 | 1000 0001 | 1000 0010 | ... | 1111 1111 |
0이 +0과 -0으로 나누어 표현된다
최상단 비트를 부호로 사용하기 때문에 7개의 비트만으로 수를 표현해야한다.
즉 표현할 수 있는 수는 -127~+127
의미상으로는 1111 1111로 채워진 비트에서 해당 비트를 빼는 것에 가깝지만,
쉽게 말해 모든 비트를 반전함으로써 음수를 표현하는 방식
부호화 절댓값은 음수 표현시에 MSB만 반전시켰다면,
1의 보수는 모든 비트를 반전시키는데에 차이가 있다.
양수(+) 표현
십진수 | +0 | +1 | +2 | ... | +127 |
---|---|---|---|---|---|
비트 | 0000 0000 | 0000 0001 | 0000 0010 | ... | 0111 1111 |
음수(-) 표현
위의 양수의 비트를 모두 반전 시킨 값과 같다.
십진수 | -0 | -1 | -2 | ... | -127 |
---|---|---|---|---|---|
비트 | 1111 1111 | 1111 1110 | 1111 1101 | ... | 1000 0000 |
0이 +0과 -0으로 나누어 표현된다.
즉 표현할 수 있는 수는 -127~+127
2의 보수체계에서 음수를 표현할 때 1의 보수에 1을 더하는 방식
1의 보수 == 모든 비트 반전,
2의 보수 == 모든 비트 반전 + 1
양수(+) 표현
십진수 | +0 | +1 | +2 | ... | +127 |
---|---|---|---|---|---|
비트 | 0000 0000 | 0000 0001 | 0000 0010 | ... | 0111 1111 |
음수(-) 표현
위의 양수의 비트를 모두 반전 시킨 값과 같다.
십진수 | -0 | -1 | -2 | ... | -127 | -128 |
---|---|---|---|---|---|---|
비트 | 0000 0000 | 1111 1111 | 1111 1110 | ... | 1000 0001 | 1000 0000 |
0이 0000 0000 (2) 하나로 표현된다.
앞서 언급한 부호화 절댓값, 1의 보수에서 0이 0000 0000 (2) 1111 1111 (2) 이 두가지로 표현되던 방식과 달리, 2의 보수에서는 1의 보수의 0 표현방식인 1111 1111에 1을 더한 1 0000 0000(2)을 -0으로 사용하게 된다. 하지만 8비트만으로 수를 표현해야하는 상황이므로 넘어간 1은 버려버리고, 0000 0000(2) 하나만으로 0을 표현할 수 있게 되는 것이다.
즉 표현할 수 있는 수는 -127~+128
지금까지 나온 방식 중에 가장 넓은 범위의 수를 표현할 수 있다.
따라서 컴퓨터는 음수를 표현할 때 이와 같은 2의 보수 개념을 사용하고 있다.