コンピュータでは、負の数を表現する際、「補数」と呼ばれる数を利用します。ここでは、その補数について見ていきます。
補数とは
補数には、「1の補数」や「2の補数」と呼ばれるものがあります。
最初に「1の補数」から説明すると、
「1の補数」は「すべてのビットを反転させた数」となります。
具体的に、10進数の5 は、2進数で表すと 101 です。以下 2進数の場合は 101(2)と表すことにします。
これについての「1の補数」は 010(2) です。それぞれの 0 が 1 に、1 が 0に置き換わる、すわなちビットが反転していますね。
次に、「2の補数」について説明すると、
「2の補数」は「すべてのビットを反転させた数に、+1 をしたもの」となります。
つまり、先ほどの10進数の5 について考えると、
010(2) + 1 となりますので、「011(2)」が 「2 の補数」です。
「2の補数」の使いどころ
さて、「2の補数」があると何が嬉しいのでしょうか?
答えは、「2の補数」を使えば、引き算を足し算として表現できることです。
これも具体的に、10進数で 5 – 3 = 2 を例にしてみていきましょう。
2進数で表現すると、5 は 101(2)、3 は 011(2)です。桁を揃えるために、 011(2) の先頭にあえて 0 を付けています。
ここが少し重要で、今計算しているコンピュータは 3bit(桁)までの表現ができることにしましょう。
さてここで、3 の「1の補数」を考えると、それは 100(2) となりますね。
これに +1 したものが「2の補数」でしたので、101(2) となります。
さあ、ここで 5 に 「 3の「2の補数」」を足してみましょう。
101(2) + 101(2) = 1010(2) となります。しかし、上述したように、今計算している計算機は、3bitまでしか取り扱えない制約条件がありました。
よって、桁上がりした4桁目は、取り扱えませんので残ったのは、010(2) すなわち10進数の 2 です。よって5 に 「 3の「2の補数」」を足す事で、引き算が完了していますね★