2の補数
説明
負の数を表現する方法の一つです。元の値とその値の負の値を加えると0になるようにします。例えば4ビット整数の場合5と-5はそれぞれ0101(2)と1011(2)になり、加算すると0000(2)となります。
4ビットの場合以下のようになります。
二進表記 | 十進表記 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | -8 |
1001 | -7 |
1010 | -6 |
1011 | -5 |
1100 | -4 |
1101 | -3 |
1110 | -2 |
1111 | -1 |
上の例を見ていただくと分かりますが、最上位ビットが1の場合に負数となります。
2の補数を求めるには全ビットを反転して1を加える方法が計算しやすいです。例えば5は0101(2)で、全ビットを反転すると1010(2)。これに1を加えて1011(2)です。
2の補数を使うと減算を加算と同じように扱えるという特徴があります。例えば5-2は5+(-2)となり、0101(2) + 1110(2) = 0011(2) → 3となります。この特徴を利用すると加算用の回路があれば減算用の回路が不要となり、演算回路を簡略化できます。
余談
補数表現のことを知らずに負数をどうやって表すかを考えてみると、先頭ビットを符号ビット、残りのビットで数を表すという表現方法が思いつきます。例えば5は0101(2)で-5は1101(2)になります。
これは普段の手書きでの表現方法と似ているためわかりやすいですが、2の補数表現と比べると減算用の回路が必要になるという欠点があります。また0000(2)が0、1000(2)が-0となり、0を表す方法が2種類存在してしまうという欠点もあります。