2の補数表現とは
2の補数は、論理回路の数値演算で負の数を表す方法の一つです。2の補数表現を用いると、2つの数値の加減算を加算回路だけで行うことができます。2の補数表現で負の数を扱う方法は、3-2を計算するときに、3から2を引くと考えるのではなく、3に-2を足すと考えることに似ています。
$$ 3_{10} – 2_{10} = 3_{10} + (-2_{10}) $$
2の補数表現の具体的な例として、3ビットの数を考えます。3ビットで表現できる数の種類は8通り\( 2^3=8 \)です。表1は、3ビットの2進数と2の補数との対応表です。2の補数表現を用いない場合、3ビットで表せる数の範囲は10進数で0から7ですが、2の補数表現では10進数で-4から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の補数表現では正の数と負の数に半分ずつ範囲を割り当てます。その結果、2の補数表現を使用しない場合に比べて、正の数で表現できる範囲は半分になります。正確には、0は1つしかない(プラス0とマイナス0の2つの0がある訳ではない)ので負の数が1つ多くなります。2の補数表現の数が正か負かは、最上位ビットが0か1かで判別できます。最上位ビットが0のときは正での数、最上位ビットが1のときは負の数です。また、図1を見ればわかるように、ある2進数の数を見ただけでは、その数が2の補数表現かそうではないのかは判別できません。数値自体とは別に、数を扱う取り決め(2の補数として扱うかどうか)の仕様などが必要になります。