戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2016年 春期 午前(科目A)01


問題文

数値を2進数で格納するレジスタがある。このレジスタに正の整数を設定した後、“レジスタの値を2ビット左にシフトして、を加える”操作を行うと、レジスタの値はの何倍になるか。ここで、あふれ(オーバフロー)は、発生しないものとする。

選択肢

3
4
5(正解)
6

🔒 解説は解答すると表示されます

左シフトと加算による乗算効果【午前解説】

正解の理由

2ビット左シフトは各ビットを2つ左へずらし、空いた下位ビットに0を入れる操作であり、数値としては倍に相当します。操作の順序が「レジスタの値を2ビット左にシフトして、を加える」なので、 となり、最終的に元のの5倍になります。したがって正解は (5)です。

解法ステップ

  1. 問題文から操作の順序を確認:「シフトして、を加える」。
  2. 2ビット左シフトの意味を数値的に解釈:
  3. シフト後に元のを加算:
  4. 計算して簡約:。オーバフローは発生しない前提なのでこれが最終値。

選択肢別の誤答解説

  • ア: 3 — これは「1ビット左シフト(2倍)してからを加える」場合の結果と混同した考え方です。問題は2ビット左シフトなので当てはまりません。
  • イ: 4 — これは左シフトのみ(倍)を最終答と誤認したケースです。問題ではその後にをさらに加えるため、4倍だけでは不十分です。
  • : 5 — 正解。2ビット左シフトでになり、さらにを加えるためとなります。
  • エ: 6 — おそらく「左シフトで4倍になりさらに2倍分を加える(または別の誤った加算)」といった誤解に基づく答えで、操作の意味から導かれる正しい式には合致しません。

よくある誤解

  • 左シフト=「1ビットごとに2倍」との一般理解は正しいが、問題の「2ビット左シフト」は2回の2倍ではなく一括で倍である点を確認しない誤答。
  • 「加える」順序を逆に捉え、先にを加えてからシフトすると別結果(回シフトでは等の誤解)になると考えるミス。
  • 符号付きやオーバーフロー処理を意識せず、ビット溢れ(ラップアラウンドや飽和)を念頭に置かない点で実機の挙動と混同する誤り。

補足コラム

  • 左シフトはハードウェア的に乗算より高速な場合が多く、は通常と等価です(符号やオーバーフロー扱いには注意)。
  • プログラミングでの確認(Python例):整数型は任意精度なのでオーバーフローは起こりません。以下で操作を確認できます。
def shift_then_add(x):
    shifted = x << 2   # 2ビット左シフト(4倍)
    return shifted + x

for x in [1, 2, 5, 10]:
    print(x, shift_then_add(x), "=", 5*x)
  • 符号付き整数での右シフト(算術シフト)と左シフトの挙動は異なるため、負の数や固定ビット幅の環境では注意が必要です。

FAQ

Q1: 「もし操作が『xを加えてから2ビット左にシフト』だったら?」
A1: その場合はのように異なる結果になります。順序は結果に直接影響します。
Q2: 正負の数やオーバーフローがあると結果は変わりますか?
A2: はい。固定ビット幅の符号付き整数やオーバーフローの処理方式によってはラップや飽和が起き、単純な倍の関係が崩れることがあります。
Q3: 「左にビットを追加する(桁を付け加える)」と解釈するのは誤りですか?
A3: 実際には左シフトは下位に0を入れる操作で、数値的には倍算に対応します。文字列的に桁を付け足すイメージと混同しないでください。

関連キーワード: ビット演算、左シフト、シフト演算、2進数、レジスタ、乗算最適化、オーバーフロー
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について