ITパスポート 2017年 春期 問72
問題文
二つの2進数01011010と01101011を加算して得られる2進数はどれか。ここで、2進数は値が正の8ビットで表現するものとする。
選択肢
ア:00110001
イ:01111011
ウ:10000100
エ:11000101(正解)
🔒 解説は解答すると表示されます
二つの2進数の加算(8ビット表現)【ITパスポート 解説】
正解の理由
問題は「二つの2進数 01011010 と 01101011 を加算」し、8ビットで正の値として表現するものです。
2進数(二進法:0と1だけで数を表す方法)を通常通り桁ごとに足すと、合計は になります。197 を8ビットの2進数で表すと です。したがって正しい選択肢は エ(11000101)です。
2進数(二進法:0と1だけで数を表す方法)を通常通り桁ごとに足すと、合計は になります。197 を8ビットの2進数で表すと です。したがって正しい選択肢は エ(11000101)です。
※ここで「8ビットで表現する」は符号付き・符号なしの区別が重要ですが、問題文は「値が正の8ビット」と明記しているため、符号なし(unsigned、範囲 〜)として扱います。
解法ステップ
- 各2進数を右端(最下位ビット)から左へ1桁ずつ足します。足し算で「2」になったらその桁は0、次に繰り上がり(キャリー)1を送ります。3の時はその桁は1、キャリー1を送ります。
- 桁ごとの計算を順に行うとキャリーが伝播します。実際の計算(右端から):
- LSB(最下位):0 + 1 = 1 (キャリー0)
- 次:1 + 1 = 0 (キャリー1)
- 次:0 + 0 + キャリー1 = 1 (キャリー0)
- 次:1 + 1 = 0 (キャリー1)
- 次:1 + 0 + キャリー1 = 0 (キャリー1)
- 次:0 + 1 + キャリー1 = 0 (キャリー1)
- 次:1 + 1 + キャリー1 = 1 (キャリー1)
- 最上位:0 + 0 + キャリー1 = 1 (キャリー0)
- 以上で結果の8ビットは 11000101 になります。
- 十進数で確認すると、01011010 = , 01101011 = 、合計 、197 の2進数表現が 11000101 です。
(参考:16進数でも簡単です。01011010 = 0x5A、01101011 = 0x6B、0x5A + 0x6B = 0xC5 → 0xC5 = 11000101)
選択肢別の誤答解説
-
ア: 00110001
これは 2進数で (十進)を表します。合計 とは大きく異なり、桁の足し間違いや複数ビットの消失(桁落ち)が原因と考えられます。 -
イ: 01111011
これは 2進数で (十進)です。部分的に桁を足し間違えてキャリーがうまく伝わっていない状態と推測されます。 -
ウ: 10000100
これは 2進数で (十進)です。見た目で MSB(最上位ビット)が1になっていますが、今回の正しい合計は (2進で11000101)であり一致しません。符号付き(2の補数)と混同して誤る場合がありますが、本問は正の8ビット(符号なし)です。 -
エ: 11000101
上の手順どおり正しく桁ごとに足した結果と一致します。十進で になり、各検算(十進変換、16進計算)でも確認できます。
よくある誤解
- キャリーを忘れる・途中で止める
- 右から左へキャリーを確実に伝播させないと結果が大きくずれます。特に連続で繰り上がる場面(111+1 のような連鎖)でミスが起きやすいです。
- 符号付き(2の補数)と符号なし(unsigned)を混同する
- 8ビットで先頭が1だと「負の数」と解釈するケースがあります。問題文で「値が正の8ビット」とある場合は符号なしとみなします。符号付きなら表現範囲が異なります(2の補数の範囲は 〜)。
- ビット位置(左端が最上位)を逆に扱う
- 桁の向き(MSB: Most Significant Bit=最上位、LSB: Least Significant Bit=最下位)を混同すると全く別の値になります。加算はLSBから行います。
補足コラム
- ビット(bit:binary digit)は0か1の情報単位です。8ビットで表せる値は 通りで、符号なしなら 〜 が表現可能です。
- 2の補数(two's complement:負の数を表す方法)は、最上位ビットが1だと負の値に見える仕組みですが、本問は正の値の扱いなので気にする必要はありません。ただし試験問題では「正の8ビット」「符号付き8ビット」など記述に注意してください。
- 手早く確認したい場合は電卓やプログラムで十進に直して加算し、再び2進数に戻すとミスが減ります。
簡単な Python 例(確認用):
a = int('01011010', 2)
b = int('01101011', 2)
s = a + b
bin_str = format(s, '08b') # 8桁の2進表現
print(a, b, s, bin_str) # 90 107 197 11000101
FAQ
Q. もし合計が256以上になったらどうなる?
A. 8ビットの符号なし表現では 〜 しか表現できないため、256以上になると桁あふれ(オーバーフロー)が生じます。問題で「値が正の8ビット」とある場合、通常はオーバーフローが起きない前提か、発生したら最上位のキャリーは切り捨て(桁落ち)されることが多いと考えます。試験問題は設問文をよく読み、扱う範囲を確認してください。
A. 8ビットの符号なし表現では 〜 しか表現できないため、256以上になると桁あふれ(オーバーフロー)が生じます。問題で「値が正の8ビット」とある場合、通常はオーバーフローが起きない前提か、発生したら最上位のキャリーは切り捨て(桁落ち)されることが多いと考えます。試験問題は設問文をよく読み、扱う範囲を確認してください。
Q. 符号付きなら結果はどう判断する?
A. 符号付き(2の補数)表現なら最上位ビットが1だと負の値に見えることがあります。符号付きでの和を求める場合は、結果が表現範囲内か(〜)やオーバーフロー発生の有無に注意します。
A. 符号付き(2の補数)表現なら最上位ビットが1だと負の値に見えることがあります。符号付きでの和を求める場合は、結果が表現範囲内か(〜)やオーバーフロー発生の有無に注意します。
Q. 電卓で確実に計算するコツは?
A. 2進を直接扱う電卓があればそれが最も簡単です。ない場合は一度十進に変換して足し、得られた十進を2進へ戻す(または16進を利用する)と誤りが少ないです。
A. 2進を直接扱う電卓があればそれが最も簡単です。ない場合は一度十進に変換して足し、得られた十進を2進へ戻す(または16進を利用する)と誤りが少ないです。
関連キーワード: 2進数、ビット、8ビット、キャリー、オーバーフロー、2の補数、桁上がり、十進変換

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

