ITパスポート 2012年 春期 問52
問題文
負の整数を2の補数で表現するとき、8桁の2進数で表現できる数値の範囲を10進数で表したものはどれか。
選択肢
ア:-256~255
イ:-255~256
ウ:-128~127(正解)
エ:-127~128
🔒 解説は解答すると表示されます
負の整数を2の補数で表現するとき、8桁の2進数で表現できる数値の範囲を10進数で表したものはどれか【ITパスポート 解説】
正解の理由
8桁の2進数(8ビット)で負の整数を表す方法として「2の補数(two's complement:負数を扱うための表現)」を使うと、表現できる範囲は下限が負の方に1つだけ大きくなります。一般式は「nビットなら から 」です。ここで n=8 とすると範囲は から 、つまり から です。したがって選択肢のうち正しいのは ウ(-128~127)です。
(ポイント)
- ビット数が1増えると表現できる値の幅は2倍になります。
- 2の補数では「0」は一意で、負数側に1つ多く値を割り当てられるため、下限が対称でない点に注意します。
解法ステップ
- 「ビット数 = 8」なので n = 8 と認識する。ここで「桁」はビット(0か1を示す単位)。
- 2の補数の一般式を思い出す:nビットで表せる範囲は ~ 。
- n = 8 を代入する: ~ 。
- なので範囲は ~ 。選択肢の中でこれに当たるのが ウ。
選択肢別の誤答解説
-
ア: -256~255
誤りです。これは「9ビットで2の補数を使った場合」の範囲( ~ )に相当します。8ビットではありません。 -
イ: -255~256
誤りです。負側と正側がずれており、どちらの端も2のべき乗の形になっていません。そもそも2の補数では正側は の形(ここでは127)になります。 -
ウ: -128~127
正しいです。上で示した一般式 ~ に一致します。 -
エ: -127~128
誤りです。正符号側が1多く、負側が1少ない対称のずれがあります。2の補数ではゼロを1通りで表すため、負側が1つ多く取られます(そのため下限が-128で上限が127になる)。
よくある誤解
-
「負と正で対称になる」と誤解する
→ 直感的には「-128~127 は対称ではない」と感じます。2の補数では「0」が1つしかないため、負側に1つ多く割り当てられ、範囲は非対称になります。 -
「8桁=8進数と混同する」
→ 「桁」はここでは二進法の桁数、つまりビット数(bit)です。8桁の2進数 = 8ビットです。8進数(octal)は別の基数です。 -
「2の補数と符号+絶対値(符号符号法)を混同する」
→ 符号+絶対値(符号ビット+絶対値)だと、正と負でゼロが二通り(+0 と -0)になりがちです。2の補数はその問題を解決します。
補足コラム
-
なぜ下限が1つ大きいのか(直感的な理由)
2の補数では最上位ビット(MSB:Most Significant Bit=一番重いビット)が「負の重み」を持ちます。8ビットの場合、MSB は の重みを持ちます。他のビットは正の重み()を持ちます。すべての下位ビットを1にすると正の重みの合計は となり、負側は MSB が1で他が0のとき になります。これが範囲が ~ になる直感的な説明です。 -
具体例(2の補数の作り方)
例えば十進で -5 を8ビットで表す場合:- 5 の2進(8ビット) = 00000101
- ビット反転(1の補数) = 11111010
- 1を足す(2の補数) = 11111011 → これが -5 の表現です。
-
確認用Python(学習用)
# 8ビットの2の補数表現を確認(-128~127)
def to_signed_8bit(x):
# x: 整数(-128~127)
return format(x & 0xff, '08b')
for v in (-128, -1, 0, 1, 127):
print(v, to_signed_8bit(v))
FAQ
Q1. 8桁って本当に8ビットですか?
A1. はい。ここでの「桁」は2進数の桁数を指します。各桁は0か1のどちらかを取り、1桁=1ビットです。
A1. はい。ここでの「桁」は2進数の桁数を指します。各桁は0か1のどちらかを取り、1桁=1ビットです。
Q2. 2の補数の利点は何ですか?
A2. 計算機が加減算を同じ回路で扱えるようになり、0は一通りだけになる点で利点があります。これによりハードウェア設計が簡単になり、演算が高速で正確になります。
A2. 計算機が加減算を同じ回路で扱えるようになり、0は一通りだけになる点で利点があります。これによりハードウェア設計が簡単になり、演算が高速で正確になります。
Q3. ほかの表現方法(符号+絶対値、1の補数)は使われないのですか?
A3. 歴史的には使われましたが、現在のコンピュータでは主に2の補数が使われます。理由は上の利点(演算回路の単純化など)です。
A3. 歴史的には使われましたが、現在のコンピュータでは主に2の補数が使われます。理由は上の利点(演算回路の単純化など)です。
関連キーワード: 2の補数、二進数、符号付き整数、ビット数、MSB、符号表現、負の数表現、ビット演算、整数範囲、表現可能範囲

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

