平成28年度 春期 午前 問1
離散数学
シフト演算に関する問題
数値を 2 進数で格納するレジスタがある。このレジスタに正の整数 x を設定した後,"レジスタの値を 2 ビット左にシフトして,x を加える"操作を行うと,レジスタの値は x の何倍になるか。ここで,あふれ(オーバフロー)は,発生しないものとする。
- ア3
- イ4
- ウ5
- エ6
答えと解説を見る
✓ これが正解ウ5
解説
2ビット左シフトは4倍。それに元を足すので5倍です。
2進数で1ビット左にシフトすると値は2倍になり、2ビット左にシフトすれば2の2乗で4倍になります。この操作の結果に、シフト前の元の値をもう一度加えるので、加える分を含めると4倍と1倍の合計になります。したがって最終の値は元の5倍です。判定の軸は、左シフトを繰り返した何倍かに、加える回数ぶんを足すことだけです。あふれが発生しないという条件がここで効いていて、途中で桁が失われることが無いため、単純な倍率の合計として答えを決めることができます。ここで扱っているのは、2進数の重み付けが桁ごとに2倍で並ぶ位取り記数法の性質と、そこから導かれるシフト演算の意味です。
ほかの選択肢はなぜ違うのか
- ア3:結果の倍率が3倍だと述べています。これは1ビット左シフトした場合の2倍に元の1倍を加えた形と一致しますが、設問はシフト幅が2ビットなので、シフトだけで既に4倍まで進みます。倍率がずれてしまいました。
- イ4:結果の倍率が4倍だと述べています。これは2ビット左シフトそのものの倍率と一致します。しかしその後に元の値を加える操作が残っているので、加算ぶんが数えられていない値になっていました。
- エ6:結果の倍率が6倍だと述べています。この値は3ビット左シフトの8倍から2倍を引くなど別の構成でしか出てきません。設問の手順は4倍にした結果に1倍を足すだけなので、この倍率には到達しませんでした。
出典:平成28年度 春期 基本情報技術者試験 午前 問1
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)