スポンサーリンク

【応用情報技術者試験】補数を5分で理解!

固定したビット幅で、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ⁿ−10~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:基数変換から補数まで学ぶ

ほかの学習テーマは、資格・目的別のnote教材ナビから選べます。

参考資料

Cornell University:符号付き整数と2の補数

コメント