コンピュータ(CPU)でなぜ負の整数の表現として2の補数を使うか

2の補数というのは何かという説明はWikipediaに譲るとします。

結論から言うと、CPU(ハードウェア)的には単なる符号なし整数の加算・減算を行っているだけなのに、人間側の解釈の仕方だけで正負の数の加算・減算を扱えるようにするためです。

いまCPUレジスタ1バイト長であるとします。で、16進数で符号なし整数0xFF(十進数で255)に1を足します。そうすると桁あふれが起こって結果としてこのレジスタの値は0(ゼロ)になります。

0xFF(255) + 1 = 0x100(256) = 0x00  [レジスタは1バイト長固定]

ここでです、もし、人間側が勝手に”1バイト長でのレジスタの値0xFFを-1という意味としよう”と決めたとします。なぜそんなことをするかといえば、そう解釈すると、

0xFF(-1) + 1 = 0

となり、都合が良いからです。

この調子で、0xFEを-2と勝手に解釈すれば…

0xFE(-2) + 2 =  0

おお~、よいですね。

では、符号なし整数で0xFE(254) + 1 = 0xFF(255)ですが、我々の符号付の解釈では…

0xFF(-2) + 1 = 0xFF(-1)

うまくいく!

とまぁ、こんな風に、符号付の計算だけのためのハードウェアをわざわざ用意しなくても、人間側の解釈だけで正負の数が表せるのが2の補数表現のうまみです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です