2進表記で負の数を表すのは、十進表記に合わせれば当然マイナスの符号を付けるだけ。
-1, -11, -1010
コンピュータ内部ではこの方法は使いません。
何通りかのやり方がありますが、整数の計算をする時には、ここで説明する「2の補数」をとるのが便利です。
コンピュータ内部で整数を何ビットで計算するかは目的により様々ですが、普通32ビットを使い、必要があれば64ビットあるいは128ビットで扱うこともあります。
ここでは簡単のために4ビットで計算するコンピュータを考えます。
内部表現 | 符号なし整数 | 符号つき整数 (2の補数) |
|||
---|---|---|---|---|---|
0 | 0 | 0 | 0 | r0 | r0 |
+1 -1 clear |
4ビットを素直に2進数と解釈するのが、「符号なし整数」です。0 から 15 まで表現できます。
15は 1111(2)で、さらに加えると 10000(2)になるはずですが、4ビットに入りきらないので 0 になってしまいます。
負の数を表現するために素直に2進数と解釈しないものを「符号つき整数」といいます。
内部表現が 0000 になっているところから -1 すると 1111 になります。
これを -1 と解釈し最上位ビット(一番左の桁)が 1 の時は負の数とするやりかたをを2の補数表現といいます。
このやり方では 4ビットで -8 から 7 まで表現できます。
負の数を表現する分、正の数の範囲が狭くなる。
コンピュータの 内部表現 |
符号なし整数 (普通の2進数) |
符号つき整数 (2の補数) |
---|---|---|
0111 | 7 | 7 |
0110 | 6 | 6 |
0101 | 5 | 5 |
0100 | 4 | 4 |
0011 | 3 | 3 |
0010 | 2 | 2 |
0001 | 1 | 1 |
0000 | 0 | 0 |
1111 | 15 | -1 |
1110 | 14 | -2 |
1101 | 13 | -3 |
1100 | 12 | -4 |
1011 | 11 | -5 |
1010 | 10 | -6 |
1001 | 9 | -7 |
1000 | 8 | -8 |
4ビットなら、1111 が -1 ですが、
8ビットなら、11111111 が -1 になります。
内部表現 | 符号なし整数 | 符号つき整数 (2の補数) |
|||||||
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+1 -1 clear |