計算機算術
整数 x を10倍する計算を、掛け算の命令を使わずにシフトと足し算で行う式として正しいものはどれか。
- A(x << 3) + (x << 1)
- B(x << 10)
- 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倍です。