2の補数とは?負の整数を表す仕組みをわかりやすく解説
この記事の要点
- 2の補数は固定ビット幅で正数・0・負数を表す整数表現です。
- 負数は「正の値をビット反転して1を足す」と作れます。
- 正数と負数を同じ加算方法で扱え、0の表現は1種類です。
2の補数とは
2の補数は、コンピュータで負の整数を扱うために広く使われる表現です。8ビットなどの幅を固定し、全2n個のビットパターンの下半分を0以上、上半分を負数へ割り当てます。
nビットの範囲:−2n−1 ~ 2n−1−18ビットなら0111 1111は127、1000 0000は-128、1111 1111は-1です。最上位ビットは符号の目安ですが、残りだけを絶対値として読む方式ではありません。
なぜ「反転して1を足す」のか
nビットでxの負数を作る操作は2ⁿ − xです。反転すると2ⁿ − 1 − xになり、1を足せば目的の値になります。
NOT(x) + 1 = 2n − x8ビットで5と-5を表す
- 5を8ビットで表す:
0000 0101 - 全ビットを反転する:
1111 1010 - 1を足す:
1111 1011
結果
5 = 0000 0101-5 = 1111 1011
同じ方法で加算できる仕組み
0000 0101 + 1111 1011を計算すると1 0000 0000です。固定幅から出た桁上がりを捨てれば0になります。この性質により、減算も相手の2の補数を足す処理として扱えます。
符号絶対値・1の補数との違い
| 方式 | -5(8ビット) | 0 |
|---|---|---|
| 符号絶対値 | 1000 0101 | 2種類 |
| 1の補数 | 1111 1010 | 2種類 |
| 2の補数 | 1111 1011 | 1種類 |
よくある質問
2の補数とは簡単にいうと何ですか?
固定ビット幅で負の整数を表す方法です。正の値の全ビットを反転し、1を足すと対応する負の値になります。
最上位ビットが1なら必ず負数ですか?
2の補数の符号付き整数として読む場合は負数です。符号なし整数として読めば正の値になるため、解釈とビット幅の指定が必要です。
1の補数との違いは何ですか?
1の補数はビット反転だけ、2の補数は反転後に1を足します。2の補数では0の表現が1種類です。
2の補数は浮動小数点数にも使いますか?
一般的な浮動小数点数全体はIEEE 754形式です。2の補数は主に固定幅の符号付き整数で使われます。