数値を2進数で格納するレジスタがある。
このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える”操作を行うと,レジスタの値はxの何倍になるか。
ここで,あふれ(オーバフロー)は,発生しないものとする。
正答3
解説
正解は3です。
2進数で格納された値を左にシフトすると、1ビットごとに値が2倍になるという性質を使う問題です。
あふれが起きない前提なので、シフトの結果はそのまま掛け算として扱えます。
【計算】
2ビット左シフトは、2倍を2回行うことと同じです。
シフト後の値は x×2^2=4x です。
これに元の x を加えると 4x+x=5x です。
したがって、レジスタの値は x の5倍になります。
【選択肢別解説】
1:× 3倍になるのは、1ビット左シフト(2x)に x を加えた場合です。
本問は2ビットシフトなので5倍です。
2:× 4倍は2ビット左シフトだけを行った段階の値です。
その後に x を加えるので5倍になります。
3:○ 2ビット左シフトで4x となり、x を加えて5x になるので正しいです。
4:× 6倍にするには、4x に 2x を加える必要があります。
本問で加えるのは x なので5倍です。
【ポイント】
左シフトは2倍、右シフトは1/2倍と覚えます。
「シフトと加算の組合せで掛け算を作る」問題は頻出で、例えば3ビット左シフトして x を引けば7倍になります。