×
数値表現と基数変換

なぜ補数を使うと引き算が足し算で済むのでしょうか。これを理解するためには、「自動車の走行距離メーター(オドメーター)」や「桁あふれ(オーバーフロー)」の概念を思い浮かべると分かりやすいです。例えば、3桁までしか表示できないメーター(000〜999)があるとし、現在「005」を指しているとします。ここから「3」を引いて「002」にするには、普通は逆回しにしますが、逆に前へ「997」進めても、メーターは「1002」になろうとしますが最上位の1が表示できずはみ出る(無視される)ため、結果的に「002」を表示します。このときの「997」が、10進数における3に対する「1000の補数」です。これと全く同じ原理を2進数で応用しているのが、コンピュータの引き算です。
コンピュータが負の数を表現する際、一般的には最上位のビット(一番左の桁)を「符号ビット」として扱い、「0なら正、1なら負」と約束します。この表現方法において「2の補数」を採用する最大の理由は、「ゼロ(0)」の表現が1通りに定まるからです。「1の補数」だけで負の数を表現しようとすると、「プラスの0(0000)」と「マイナスの0(1111)」という2つのゼロが存在してしまい、プログラムの条件判定(ゼロかどうかをチェックする処理など)が非常に複雑になってしまいます。2の補数表現であれば、ゼロは「0000」の1つだけになり、ハードウェアの設計もソフトウェアの処理も極めてスマートに統一できるのです。