まぐとろぐ

書き置き場

【FE】二進数の補数について

分からないという人の為に、備忘録も兼ねて

 

まず二進数の補数は1の補数と2の補数が存在します

まず0110という二進数の数字があったとします。

4桁二進数の最大値は1111ですが、1111-0110=1001より、1001を足したら0110は最大値1111になります。

また5桁の二進数になる為(桁上がり)には4桁二進数の最大値に1を足せばよいので前述より1001+1=1010を0110に足した時に5桁の10000になります。

この1001、1010をそれぞれ1の補数、2の補数と呼びます。

つまりN進数において、N-1の補数がその数値の桁における最大値を取るために補う数、Nの補数がその数値が次の桁になる為に補う数です。

これは8進数でも10進数でも同様に言えることです。

 

では何故2の補数が引き算を担うことができるのか

00000110とそれに対する2の補数11111010を使って説明します。

これら2数を足すと桁上がりし00000110+11111010=100000000

となりますが8bitからあふれ出た9桁目の1を無視すると00000000となります。

つまり(ある数値)+(それに対する2の補数)=0となることが分かります。

という事は、2の補数は8bit環境下において元の数値にマイナスの記号を付けた値と同値、なのでN+(-N)=0という事になり、足し算のみで計算が可能になります。

この手法を用いて足し算しかできないコンピュータは引き算をしていたんですね~