なぜ「2の補数」を使うのか


なぜ2の補数が使われるのか

ハードウェアが簡単に

2の補数を用いることで,減算を加算器を用いてできるのでハードウェアを簡単にできます.
つまりは減算器が不要ということです.

減算を加算器を用いて行うとはどういうことでしょうか.

日常の10進数で考えてみましょう.
10-5 という減算を加算で行おうとすると,負の数という定義を導入し,
10 + (-5)
とすることで加算に変えることができます.

コンピュータにおける演算では負の数が存在しません,
つまり,日常の演算の方法を用いることができないのです.
そこで,「負の数という定義を導入し,」の部分を「2の補数という定義を導入し,」とすることで減算を加算器を用いて行うことを可能にしているのです

2の補数の定義

まず、2の補数の定義を見ましょう.
Nbitの範囲で、
A + (Aの2の補数) = 2^N
つまり
(Aの2の補数) = 2^N - A
と一つの式で表されます.

(Aの2の補数) = 2^N - A

2^Nを2進数で表すには,N+1 bit必要です.
(例えば、 2^2=4 は2進数表示では、100 つまり3bit必要)
そこで,定義式をN bitの範囲で見るようにすれば,
(Aの2の補数) = - A
となります.
N bitの範囲で見るというのは,2進数で表された数値のN桁目までを見るということに等しいです.

よって,負の数のようなものを表すことができているのです!!

減算を加算に

各N,M bitで表される数A, Bにおいて
pをN,Mのうち大きい方として,
A - B = A + (2^p - B)
とし,p bitの範囲で見れば
A - B = A + (-B)
として,負の数らしきものが式に現れるのです.

なぜわざわざ0と1を反転させた後、1足すの???

 →「A + (Aの2の補数) = 2^N」という定義が先行し、
 たまたま「0と1を反転させた後、1足す」ことで定義が満たされたという結果論。
 このような数学的(?)な背景を知り,少しでも理解の助けになれば嬉しいです.