2進表記で負の数を表すのは、十進表記に合わせれば当然マイナスの符号を付けるだけ。
-1, -11, -1010
コンピュータ内部ではデータを 0,1 だけで表しているので、-(マイナス)を表現するには新たな取り決めが必要です。どうせ取り決めをするなら別の方法をとってもいいと、何通りかの方法が考えられています。
一般には負の数は「2の補数」を使って表します。整数の計算をする時に便利になるからです。
ここでは簡単のために4ビットで計算するコンピュータを考えます。
同じ0と1のパターンでも、そのまま2進数とする時と2の補数とする時では違う意味になります。
内部表現 | そのまま2進数とした時の 10進数(0〜15) |
一部を2の補数とした時の 10進数(-8〜7) |
|||
---|---|---|---|---|---|
0 | 0 | 0 | 0 | r0 | r0 |
4ビットを素直にそのまま2進数と解釈すると今までどおり 0 から 15 まで表現できます。
同じ4ビットを一部を2の補数として使うという事を取り決めすると -8 から 7 まで表現できます。
内部表現が 0000 になっているところから -1 すると 1111 になります。
これを -1 と解釈することにしました。
さらに -1 すると 1110 ですが、0000 から2を引いたことになりますからこれは -2 です。
さらに -1 すると 1101 ですが、0000 から3を引いたことになりますからこれは -3 です。
コンピュータの 内部表現 |
普通の2進数として | 2の補数として |
---|---|---|
0000 | 0 | 0 |
1111 | 15 | -1 |
1110 | 14 | -2 |
1101 | 13 | -3 |
1100 | 12 | -4 |
こうやっていくと0001の-15まで、全部のパターンをマイナスの数と解釈できるようになってしまいます。
つまり、全部のパターンが普通の2進数として解釈した時と2の補数として解釈した時とで2つの値を表すことになってしまいます。
マイナスの数もプラスの数も両方必要です。そこで、最上位ビット(一番左の桁)が 1 の時は負の数とする(つまり2の補数として解釈する)とします。
このやり方では 4ビットで -8 から 7 まで表現できます。
負の数を表現する分、正の数の範囲が狭くなることはしかたありません。
最上位ビット(一番左の桁)が 1 の時は負の数とする表現の仕方を符号つき整数といいます。
これに対して全部のピットを素直にそのまま2進数と解釈する方法を符号なし整数といいます。
コンピュータの 内部表現 |
符号なし整数 (普通の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 |