2の補数
2の補数を用いて、二進法で表された数(二進数)を負の整数に対応づけられる。2の補数の定義より、n 桁の二進数 x とその補数 xc は以下の関係を満たす:
x + x c = 2 n ( ⟺ x c = 2 n − x ) . {\displaystyle x+x_{\mathrm {c} }=2^{n}\quad (\iff x_{\mathrm {c} }=2^{n}-x)\,.}
冪 2 の倍数を 0 と同一視すれば、上記の補数の関係は 2 を法とする合同式に置き換えられる:
x + x c ≡ 0 ( mod 2 n ) . {\displaystyle x+x_{\mathrm {c} }\equiv 0{\pmod {2^{n}}}\,.}
これは x の補数 xc を x の反数 −x と見なすことを意味する。すなわち、数 y から x を引く操作は、数 y と補数 xc のたし算に置き換えられる:
y − x ≡ y + 2 n − x ≡ y + x c ( mod 2 n ) . {\displaystyle y-x\equiv y+2^{n}-x\equiv y+x_{\mathrm {c} }{\pmod {2^{n}}}\,.}
同様に反数 −x のかけ算は補数の積に置き換えられる:
y ⋅ ( − x ) ≡ y ⋅ 2 n + y ⋅ ( − x ) ≡ y ⋅ x c ( mod 2 n ) . {\displaystyle y\cdot (-x)\equiv y\cdot 2^{n}+y\cdot (-x)\equiv y\cdot x_{\mathrm {c} }{\pmod {2^{n}}}\,.}
以下に#2の補数表現における計算例を示す。
2の補数表現において、−1 は常にすべての位の値が 1 の二進数 111...112 に対応づけられる。従って、数をビット列とみなせば、ビット列 x とそのビットを反転させたビット列 x は常に以下を満たす:
x + f x ≡ − 1 ( mod 2 n ) . {\displaystyle x+{}^{\mathrm {f} }x\equiv -1{\pmod {2^{n}}}\,.}
上記より、x の2の補数は xc = x + 1 と表せる。従って減法は、
y − x ≡ y + f x + 1 ( mod 2 n ) {\displaystyle y-x\equiv y+{}^{\mathrm {f} }x+1{\pmod {2^{n}}}}
と書き換えられる。ビット反転はまた1の補数を得る操作でもある。
f x ≡ − 1 − x ≡ ( 2 n − 1 ) − x ( mod 2 n ) . {\displaystyle {}^{\mathrm {f} }x\equiv -1-x\equiv \left(2^{n}-1\right)-x{\pmod {2^{n}}}\,.}
右辺の (2 − 1) − x は x に対する1の補数そのものであるから、ビット反転は1の補数を得る操作になっている。
2の補数で表される数は、符号ビット(最上位ビット) bn−1 が 0 なら非負の値を取り 1 なら負の値を取る。すなわち、負値か非負値かの判定は符号ビットのみから判別できる。符号・絶対値表現や1の補数表現ではゼロを表す二進数が一意でなく、符号ビットが 0 の +0 と符号ビットが 1 の −0 があるため、−0 が許容される限り、これらの表現では符号ビットのみから負数か非負数かを判定できない。