2の補数表現

logic

2の補数表現とは

2の補数は、論理回路の数値演算で負の数を表す方法の一つです。2の補数表現を用いると、足し算(加算回路)で引き算を扱うことができます。

$$ 3_{10} – 2_{10} = 3_{10} + (-2_{10}) $$ 具体的な例として、3ビットの数を考えます。 3ビットで数を表現する時、扱える数は8通り\(2^3=8\)です。2の補数表現を用いない場合と用いる場合で、3ビットへの数の割り当ては次の表のようになります。

2進数 000 001 010 011 100 101 110 111
10進数 0 1 2 3 4 5 6 7
10進数(2の補数表現) 0 1 2 3 -4 -3 -2 -1
この表のように、2の補数表現では正の数と負の数に半分ずつ数を割り当てます(正確には、マイナス0がないので、負の数が1つ多くなる)。その結果、2の補数表現を使用しない場合に比べて、正の数で表現できる範囲は半分になります。2の補数表現の数が正か負かは、最上位ビットが0か1かで判別できます。また、この表を見ればわかるように、ある2進数の数を見ただけでは、その数が2の補数表現かどうかは判別できません。別途、数を扱う取り決め(2の補数として扱うかどうか)が必要になります。

2の補数への変換

2の補数は、次の手順で求めることができます。3ビットの数\(3_{10} = 011_{2}\)の2の補数\(-3_{10}\)を求める例を示します。

1. 元の数の各ビットを反転する

$$3_{10} = 011_{2}の全ビットの反転: 100_{2}$$

2. 1を足す

$$100_{2} + 001_{2} = 101_{2}$$ よって、\(3_{10} = 011_{2}\)の2の補数表現は、\(101_{2}=-3_{10}\)ということがわかります。この変換が正しいかどうかは、元の数と変換後の数を足して0になるかどうかで確認できます。 $$ 3_{10} + -3_{10} = 011_{2} + 101_{2} = 000_{2} = 0_{10}$$ このように、結果が0になるので、2の補数は\(101_{2}\)で正しいことがわかります。 2の補数表現で重要なのは、数を表すビット数です。\( 011_{2} \)と\( 101_{2} \)を足して4ビットで表すと、桁上がりが発生して\( 1000_{2}= 8_{10}\)になりますが、この例では数は3ビットと決めているので4ビット目は無視する必要があります(4ビット目は存在しない)。
タイトルとURLをコピーしました