基本情報

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

問題

基本情報 | 平成29年度 秋期 | 分野:テクノロジ系

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

キーボード:1〜4で選択・Enterで次へ

タップするとすぐ答え合わせ

答え合わせ

正解は A
  • A
  • B
  • C
  • D

自信の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
訂正の記録この問題の訂正はありません(サイト全体の記録)
出典と作り方

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