負の整数の表現

2進表記で負の数を表すのは、十進表記に合わせれば当然マイナスの符号を付けるだけ。

-1,  -11,  -1010

コンピュータ内部ではデータを 0,1 だけで表しているので、-(マイナス)を表現するには新たな取り決めが必要です。どうせ取り決めをするなら別の方法をとってもいいと、何通りかの方法が考えられています。

一般には負の数は「2の補数」を使って表します。整数の計算をする時に便利になるからです。

2の補数による負数の表現

そのまま2進数とすると正の数だけですが、一部を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 まで表現できます。

2の補数はどうやって決まったか

内部表現が 0000 になっているところから -1 すると 1111 になります。

これを -1 と解釈することにしました。

さらに -1 すると 1110 ですが、0000 から2を引いたことになりますからこれは -2 です。

さらに -1 すると 1101 ですが、0000 から3を引いたことになりますからこれは -3 です。

コンピュータの
内部表現
普通の2進数として 2の補数として
000000
111115-1
111014-2
110113-3
110012-4

こうやっていくと0001の-15まで、全部のパターンをマイナスの数と解釈できるようになってしまいます。

つまり、全部のパターンが普通の2進数として解釈した時と2の補数として解釈した時とで2つの値を表すことになってしまいます。

マイナスの数もプラスの数も両方必要です。そこで、最上位ビット(一番左の桁)が 1 の時は負の数とする(つまり2の補数として解釈する)とします。

このやり方では 4ビットで -8 から 7 まで表現できます。

負の数を表現する分、正の数の範囲が狭くなることはしかたありません。

内部表現-符号なし整数-符号つき整数の対応表

最上位ビット(一番左の桁)が 1 の時は負の数とする表現の仕方を符号つき整数といいます。

これに対して全部のピットを素直にそのまま2進数と解釈する方法を符号なし整数といいます。

コンピュータの
内部表現
符号なし整数
(普通の2進数)
符号つき整数
(負数は2の補数)
011177
011066
010155
010044
001133
001022
000111
000000
111115-1
111014-2
110113-3
110012-4
101111-5
101010-6
10019-7
10008-8

8ビットの計算

4ビットなら、1111 が -1 ですが、

8ビットなら、11111111 が -1 になります。

内部表現 符号なし整数 符号つき整数
(負数は2の補数)
0 0 0 0 0 0 0 0 0 0