2の補数とは?負の整数を表す仕組みをわかりやすく解説

この記事の要点

ビット列をすぐに確認したい方へ

ビット幅と値を指定すると、2進数・16進数と計算手順を表示します。

2の補数変換ツールを使う

2の補数とは

2の補数は、コンピュータで負の整数を扱うために広く使われる表現です。8ビットなどの幅を固定し、全2n個のビットパターンの下半分を0以上、上半分を負数へ割り当てます。

nビットの範囲:−2n−1 ~ 2n−1−1

8ビットなら0111 1111は127、1000 0000は-128、1111 1111は-1です。最上位ビットは符号の目安ですが、残りだけを絶対値として読む方式ではありません。

なぜ「反転して1を足す」のか

nビットでxの負数を作る操作は2ⁿ − xです。反転すると2ⁿ − 1 − xになり、1を足せば目的の値になります。

NOT(x) + 1 = 2n − x

8ビットで5と-5を表す

  1. 5を8ビットで表す:0000 0101
  2. 全ビットを反転する:1111 1010
  3. 1を足す:1111 1011
結果

5 = 0000 0101
-5 = 1111 1011

同じ方法で加算できる仕組み

0000 0101 + 1111 1011を計算すると1 0000 0000です。固定幅から出た桁上がりを捨てれば0になります。この性質により、減算も相手の2の補数を足す処理として扱えます。

符号絶対値・1の補数との違い

方式-5(8ビット)0
符号絶対値1000 01012種類
1の補数1111 10102種類
2の補数1111 10111種類

よくある質問

2の補数とは簡単にいうと何ですか?

固定ビット幅で負の整数を表す方法です。正の値の全ビットを反転し、1を足すと対応する負の値になります。

最上位ビットが1なら必ず負数ですか?

2の補数の符号付き整数として読む場合は負数です。符号なし整数として読めば正の値になるため、解釈とビット幅の指定が必要です。

1の補数との違いは何ですか?

1の補数はビット反転だけ、2の補数は反転後に1を足します。2の補数では0の表現が1種類です。

2の補数は浮動小数点数にも使いますか?

一般的な浮動小数点数全体はIEEE 754形式です。2の補数は主に固定幅の符号付き整数で使われます。