固定したビット幅で、1の補数は全ビットの反転、2の補数は反転した結果に1を加えて求めます。2の補数表現は、負の整数を表し、減算を加算として扱うために使われます。まず「何ビットで計算するか」を確認しましょう。
1の補数と2の補数の違い
| 種類 | 作り方 | 4ビットの0101から求める結果 |
|---|---|---|
| 1の補数 | 0と1をすべて反転 | 1010 |
| 2の補数 | 全ビットを反転して1を加える | 1011 |
ここでは2進数の補数を扱います。計算中も指定されたビット幅を保ち、その幅を超えた桁は残しません。
4ビットで−5を表す
+5:0101
反転:1010
+1:1011
4ビットの2の補数表現では1011=−5
同じ1011でも、符号なし整数として読めば11です。2の補数表現では最上位ビットの重みが−8となり、−8+0+2+1=−5になります。ビット列だけで意味を決めず、表現方式を確認してください。
減算を加算として計算する
4ビットの例で5−3を計算します。3は0011、−3は1101です。
0101(5)
+1101(−3)
------
10010
4ビットだけ残す → 0010(2)
5−3を5+(−3)として計算できました。固定幅を超えた桁を捨てることと、符号付き整数のオーバーフローは別の判断です。結果が表現範囲に入るかも確認してください。
表現できる範囲
| 表現方式 | nビットの範囲 | 4ビットの範囲 |
|---|---|---|
| 符号なし整数 | 0~2ⁿ−1 | 0~15 |
| 2の補数による符号付き整数 | −2ⁿ⁻¹~2ⁿ⁻¹−1 | −8~7 |
8ビットの2の補数表現なら−128~127です。最小値の−128を反転して1を加えても、8ビットでは+128を表せないため同じビット列になります。符号反転の結果が常に範囲内になるわけではありません。
よくある混同
1の補数と2の補数では、最後に1を加えるかどうかが違います。また、0の2の補数を同じ幅で求めると0です。2の補数を求める操作そのものが、常に負数を作るわけではありません。
確認問題
4ビットの「0100」の2の補数を求めてください。
解答・解説を見る
反転すると1011、1を加えると1100です。4ビットの2の補数表現として読むと−4になります。
基数変換と補数をまとめて復習
無料noteでは、基数変換から1の補数・2の補数、負数の読み取り、符号付き整数の範囲まで例を使って解説しています。変換と補数を一緒に練習したい方はこちらへ進んでください。
ほかの学習テーマは、資格・目的別のnote教材ナビから選べます。

コメント