2の補数

二進法

 私たちが普段使っている数は、十進法と言って、0,1,2,3,4,5,6,7,8,9の
十個の数を使い、ある位が9の状態から、さらに1増えると、位を一つ繰り上げるという表記方法です。
 これと同様に、二進法という表記方法もあります。
 これは、0,1の二個の数字を使い、ある位が1の状態から、さらに1増えると、位を一つ繰り上げるという
表記方法です。二進法で表された数を二進数と言います。
 以下に、十進法と二進法との対応例を挙げます。(10)は十進法、(2)は二進法の表記方法であることを
表しています。
 0(10)=0(2)
 1(10)=1(2)
 2(10)=10(2)
 3(10)=11(2)
 4(10)=100(2)
 8(10)=1000(2)
 16(10)=10000(2)
十進法では、位が1つ左に移動するごとに、十倍、百倍となりますが、
二進法では、二倍、四倍、八倍となります。


ビット

 二進法は、0と1だけですべての整数を表せます。
 コンピュータでは、これを電気的な OFF(0) ON(1) に置き換えて、数を扱っています。
ところが、数字を記憶しておく場所には限りがあるので、整数として扱える数には上限があります。
このとき、最大何桁の二進数までを扱えるかという桁数のことをビットといい、八ビットの場合、
0(2) から 11111111(2) まで、十進数で言うと、0(10) から 255(10) の整数を表すことが出来ます。
※実際は、二進数の桁そのものをビットといいます。
※※以下、八ビットの場合について説明します。

ところが、これでは、負の数は扱えません。
 そこで、以下のように考えます。
 11111111(2) に さらに1加えると、100000000(2) ですが、八ビット分の数しか扱えないので、
100000000(2) は 0(2) と見なされます。
 そうすると、もとの 11111111(2) は、0(2) より1小さいということになり、-1(10) を表すことになります。
同様に、
 -2(10)=11111110(2)
 -3(10)=11111101(2)
 -4(10)=11111100(2)
 ・・・・・・
 -127(10)=10000001(2)
のように決めることができます。
とくに、10000000(2) は、-128(10) を表し、+128(10) を表す二進法表記はありません。
※負の数を表す二進数はすべて、一番上のビットが1になっています。このビットを特に符号ビットといいます。

2の補数
 さて、十進数で、ある数と、それを符号逆転した数(プラスとマイナスの関係)を二進法で表すと、
 00000001(2) ←→ 11111111(2) ・・・ 1(10) と -1(10)
 00000010(2) ←→ 11111110(2) ・・・ 2(10) と -2(10)
 00001000(2) ←→ 11111000(2) ・・・ 8(10) と -8(10)
のようになりますが、このような(-1(10) 倍するような)操作を、2の補数を取る、と言い、その手順は、
1.二進法の0と1を入れ換える(ビット反転といいます)
2.1を加える
です。
(例)
 01001101(2)=77(10) →10110011(2)=-77(10)

ちなみに、ビット反転のみをした数を、1の補数と言います。

「算数・数学」の部屋に戻る