ちょっとした工夫があって個人的に補数って好きなんですよね。なので、知識整理がてら補数について書くいておこうと思います。
#補数とは
補数はコンピュータで使われる、引き算を足し算で計算するための数です。
補数を初めて聞いた方は何を言ってるかわかりにくいと思いますが、1+(-1)の式の-1に相当する数を作ったってことですね。
#補数の仕組み
補数はコンピュータのオーバーフローを利用します。オーバーフローとは、コンピュータの扱える桁より大きい桁の数は消えてしまうことです。8ビットしか扱えないコンピュータでは計算結果が100000000だったとしても00000000とみなされるということです。
補数はこのオーバーフローを逆手にとって、ある数xを足したらぴったりオーバーフローする数を-xとするのです。
例えば2進数の00000001の負の値は8ビットを扱うコンピュータの場合、11111111になります。
実際に計算してみましょう。
00000001+11111111=100000000
100000000は00000000とみなされるので、11111111は0000001の負の値になっています。
別のパターンでも計算してみましょう。10110111(10進数:187)に11111111を足します。
10110111+11111111
=10110110+00000001+11111111
=10110110+10000000
=10110110+0000000
=10110110
答えは10110110(10進数:186)となります。
このように補数はオバーフローにより消えてしまう数を利用して引き算を足し算で計算できるようにするのです。
オバーフローという難点を利用して利点を生む、ちょっとおもしろいですよね。