2の補数とは、2進数の減算において威力を発揮する(2進数を減算を加算で表すことができる)。
定義
2の補数とは2進数表示したものに、数字の0と1を入れ替え、1を足したものである。
4の場合
4の2進数表示は0100。この0100の0と1を入れ替えると1011となる。これに1を足すと1100となる。
よって、1100が4の2の補数表示となる。
やり方
減算において、マイナスがついている符号を2の補数表示し、加算する。加算した結果が2進数で表された減算の答えになる。
5-3 = 2 の場合
5は2進数で0101。3は2の補数で1101
よって
0101 + 1101 = 0010
0010は10進数で2だから、この式は正しい。
10進数 | 2 進数 | 2の補数 |
---|---|---|
0000 | 0000 | |
0001 | 0001 | 1111 |
0002 | 0010 | 1110 |
0003 | 0011 | 1101 |
0004 | 0100 | 1100 |
0005 | 0101 | 1011 |
原理
ビットを反転させるという行為は、n桁の2進数の場合、
(n桁全てが1) - (元の数字)
という計算をする行為と同じである。例えば、『4の2進数表示は0100。この0100の0と1を入れ替えると1011となる。』と先ほど述べたが、
1111 - 0100 = 1011
となる。これは4の2進数表示は0100をビット反転させたものと同じである。
以上から 5-3 = 2 の場合
0101 - 0011 = 0101 + (1111 - 0011 + 1 ) = 10000 + (0101 - 0011)
となり、4桁で考えると10000が無視されるので、2の補数を用いて減算を加算で実現できる。