計算機算術

整数 x を10倍する計算を、掛け算の命令を使わずにシフトと足し算で行う式として正しいものはどれか。

  1. A(x << 3) + (x << 1)
  2. B(x << 10)
  3. C(x << 2) + x
答えと解説を見る

正解:A. (x << 3) + (x << 1)

左に1ビットずらすと2倍になるので、x << 3 は8倍、x << 1 は2倍です。8x + 2x = 10x となるので、(x << 3) + (x << 1) で10倍が計算できます。定数を掛ける掛け算は、このようにシフトと足し算の組み合わせに置き換えられ、コンパイラも速い方を選んで使います。x << 10 は 2¹⁰ = 1024倍、(x << 2) + x は 4x + x = 5倍になります。シフトのビット数を10倍と取り違えないよう注意が必要です。

  • A. 正しい。8x + 2x = 10xです。
  • B. x << 10 は1024倍です。
  • C. (x << 2) + x は5倍です。
この分野を解く 分野ページへ

計算機算術のほかの問題

  1. 一般的な整数の除算器(1ビットずつ商を求める回復型・非回復型など)が、乗算器より遅くなりやすい理由として正しいものはどれか。
  2. 8ビットの符号付き整数で −8(1111 1000)を算術右シフトで1ビット右にずらした結果はどれか。
  3. C言語で、int型の −7 / 2 と −7 >> 1(算術右シフトの場合)の結果の組み合わせとして正しいものはどれか。
  4. C言語で、32ビットの符号なし整数(unsigned int)の 0 から 1 を引いた結果はどれか。
  5. 符号なしの整数どうしの足し算で、結果が表せる範囲を超えた(桁あふれした)ことを判定する方法として正しいものはどれか。