2の補数
例えば、二進数 01012 (= 5) から二進数 00112 (= 3) を引く場合、以下のように計算できる:
0 1 0 1 − 0 0 1 1 0 0 1 0 {\displaystyle {\begin{array}{lrrrrr}&&0&1&0&1\\{}-{}&&0&0&1&1\\\hline &&0&0&1&0\end{array}}}
一方、二進数 00112 の2の補数 11012 を足す計算は、以下のようになる:
0 1 0 1 + 1 1 0 1 1 0 0 1 0 {\displaystyle {\begin{array}{lrrrrr}&&0&1&0&1\\{}+{}&&1&1&0&1\\\hline &{\cancel {1}}&0&0&1&0\end{array}}}
5桁目以降を無視し下4桁を取り出せば、こちらも結果は 00102 (= 2) になり、引き算の場合と一致する。また、11012 は負数 −3 を表していることが分かる。
2の補数表現は、符号ビットが 0 なら符号なし整数表現(つまり通常の二進法)に一致する。この性質は符号・絶対値表現や1の補数表現も持っている。
( b n − 1 b n − 2 ⋯ b 1 b 0 ( 2 ) ) c ↦ 1 − ( 1 − b n − 1 ) ⋅ 2 n − 1 + ∑ k = 0 n − 2 ( 1 − b k ) ⋅ 2 k . {\displaystyle \left({b_{n-1}b_{n-2}\cdots b_{1}b_{0}}_{(2)}\right)_{\mathrm {c} }\mapsto 1-(1-b_{n-1})\cdot 2^{n-1}+\sum _{k=0}^{n-2}{(1-b_{k})\cdot 2^{k}}\,.}
等比数列の和 ∑ k = 0 n − 2 2 k = 2 n − 1 − 1 {\textstyle \sum _{k=0}^{n-2}2^{k}=2^{n-1}-1} を用いれば、上記の補数は以下のようにも表せる:
( b n − 1 b n − 2 ⋯ b 1 b 0 ( 2 ) ) c ↦ b n − 1 ⋅ 2 n − 1 − ∑ k = 0 n − 2 b k ⋅ 2 k . {\displaystyle \left({b_{n-1}b_{n-2}\cdots b_{1}b_{0}}_{(2)}\right)_{\mathrm {c} }\mapsto b_{n-1}\cdot 2^{n-1}-\sum _{k=0}^{n-2}{b_{k}\cdot 2^{k}}\,.}
これは結局、元の数に負符号を付けた形となっている(ただし元の数が −2 の場合は算術オーバーフローが発生する。オーバーフローをチェックせずラップアラウンドする場合、−2 自身へ写る)。