平成29年度 春期1テクノロジ系

基本情報 平成29年度 春期 問1:テクノロジ系に関する問題

数値を 2 進数で表すレジスタがある。このレジスタに格納されている正の整数 ヶ を 10 倍にする操作はどれか。ここで, 桁あふれは起こらないものとする。

  • a*を2ビット左にシフトした値に* を加算し, 更に1ビット左にシフトする。正答
  • b*を2ビット左にシフトした値に*を加算し, 更に2 ビット左にシフトする。
  • c*を3ビット左にシフトした値と, *ぇを2ビット左にシフトした値を加算する。
  • d*を3ビット左にシフトした値に*を加算し, 更に 1 ビット左にシフトする。
正答:A*を2ビット左にシフトした値に* を加算し, 更に1ビット左にシフトする。

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは a です。

2進数を「左に1ビットずらす=2倍」になる、というのが超基本ルール(10進数で言う「0を1個足す」みたいなもの)。

だから 10倍 = 8倍 + 2倍 と分解して作ります。

  • 2ビット左シフト=×4、それに元のxを足す=×5
  • さらに1ビット左シフト=×2 → 合計 ×10 ✨

👉 覚え方:左シフト1回=×2。10倍は「×5してから×2」で作る。

ほかの選択肢:b は×(4+1)×4=20倍、c は×8+×4=12倍、d は×(8+1)×2=18倍 で、どれも10倍にならない。

標準試験対策の基準レベル

なぜこれが正解か

正解は a。2進数の左1ビットシフトは×2に等しい。10倍を作るには 10 = (4 + 1) × 2 = (x×4 + x) × 2 と分解する。これを操作で表すと、xを2ビット左シフト(×4)→ xを加算(×5化)→ 1ビット左シフト(×2)。結果はx×10。

各選択肢の解説

  • a:(x×4 + x) × 2 = x×10 → 正解
  • b:(x×4 + x) × 4 = x×20。
  • c:x×8 + x×4 = x×12。
  • d:(x×8 + x) × 2 = x×18。

覚え方・ひっかけ注意

nビット左シフト=×2ⁿ」が鉄則。10倍は素数分解で 2×5、5は (4+1) または (2+2+1) で作れる。シフト演算は乗算より高速なので組込み系でも頻出。桁あふれ条件「起こらない」は最上位ビットを気にしなくてよい合図。

上級誤答論破・背景理論まで深掘り

理論的背景

シフト演算は乗除算より大幅に高速で、組込み系・DSP・暗号処理で多用される。一般に定数倍 N は N = Σ2^k の和で表現でき、ビット表現 (popcount) の数だけ加算が必要になる。10₁₀ = 1010₂ なので2回の加算(または1回の加算+1回のシフト)で実現できる。コンパイラはこれを strength reduction(強度低減) 最適化として自動適用する。

実装パターンの比較

  • (x<<3) + (x<<1) = 8x + 2x = 10x(2回シフト+1回加算)
  • ((x<<2) + x) << 1 = 5x<<1 = 10x(aの方式、2回シフト+1回加算)
  • x*10 を符号付きで安全に書くなら、桁あふれ検査が必要。

両者の命令数は同等だが、aの方式は中間結果が小さく キャリーチェーンが短い メリットがある。

試験での位置づけ

FEの基礎理論「コンピュータシステム」分野で毎期出題級の超頻出。シフト・論理演算・浮動小数点正規化・補数表現はセットで習得すべき。応用情報・高度ではCRC・GF(2)体の演算まで発展する。

選択肢の発展補足

コンパイラの定数除算最適化(Granlund-Montgomery法)では、除数の逆数を固定小数点で乗算してシフトする手法が使われる。シフトを使った乗算最適化はARM Cortex等の組込みCPUで特に効果的。負数の右シフトは算術シフト(符号拡張)論理シフト(0埋め)で結果が異なる点も試験頻出。

出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成29年度 春期1/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。