【にのほすう】

2の補数 とは?

最終更新:
💡 ビット反転に1を足す、負の整数の表し方

固定したビット数で符号付き整数を表す方式。負の数を含む加減算を同じ加算の仕組みで扱いやすくする。ビット反転に1を足すと通常は符号を反転できるが、表現範囲の最小値には正の相手がない。

📌 このページのポイント
2の補数:8ビットで−3を表す +3 0 0 0 0 0 0 1 1 反転 1 1 1 1 1 1 0 0 +1後 1 1 1 1 1 1 0 1 0と1を反転 1を足す 11111101 は、符号付きなら −3 先頭が0:正またはゼロ / 1:負 範囲は −128 〜 +127 −128の正負反転は範囲に収まらない
ビット数を8に固定した例です。同じビット列でも、符号なし整数なら意味が異なります。最小値には同じビット数で表せる正の相手がありません。
ひよこ ひよこ
0と1だけで、マイナスをどう表すの?
ペンギン先生 ペンギン先生
ビット数を決め、並びに符号付き整数としての意味を持たせるんだ。8ビットで−3なら、3の00000011を反転して11111100にし、1を足した11111101で表すよ。
ひよこ ひよこ
先頭が1なら、いつでも負の数?
ペンギン先生 ペンギン先生
2の補数の符号付き整数として読む場合だよ。同じ11111101でも、符号なし整数なら253になる。先頭が0なら正の数かゼロ、1なら負の数と読むんだ。
ひよこ ひよこ
足し算に使えるのが便利なの?
ペンギン先生 ペンギン先生
そうだよ。5の00000101と、−3の11111101を足すと1 00000010になる。下位8ビットの00000010を残せば答えは2。反転と1の加算を組み合わせ、加算の仕組みを減算にも使えるんだ。
ひよこ ひよこ
8ビットでは何から何まで表せる?
ペンギン先生 ペンギン先生
−128から127までだよ。ゼロの表し方は一つで、負の側が一つ多い。たとえば127に1を足した数学上の答え128は、この範囲には収まらないんだ。
ひよこ ひよこ
反転して1を足せば、どんな数も正負を変えられる?
ペンギン先生 ペンギン先生
最小値は例外だよ。8ビットの−128は10000000。反転して1を足しても10000000に戻り、+128にはならない。これはオーバーフローの問題で、プログラムでの扱いは言語や演算の規則も確認する必要があるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「2の補数」って出てきたら「決まったビット数で、負の整数も足し算に組み込める表し方」と思えばだいたいOK!
📖 おまけ:英語の意味
「Two's Complement」 = 2進数の補数
💬 nビットでは、2のn乗から元の値を引いた結果の下位nビットを使う。元の値と足すと下位nビットがゼロになる関係を利用しているよ。

参考資料

← 用語集にもどる