修了試験 2017-07-23実施分 基本情報技術者試験 問1
数値を2進数で格納するレジスタがある。 このレジスタに正の整数xを設定した後,"レジスタの値を2ビット左にシフトして,xを加える"操作を行うと,レジスタの値はxの何倍になるか。 ここで,あふれ(オーバフロー)は,発生しないものとする。
正答3
解説
正解は3です。 レジスタの値を左に1ビットシフトすると、2進数の値は2倍になります。 2ビット左シフトは2倍を2回行うことなので、値は4倍になります。 【計算】 2ビット左シフト後の値は x×2^2=4x です。 これに x を加えると 4x+x です。 よって結果は 5x となり、xの5倍です。 【選択肢別解説】 1:× 3倍になるのは、1ビット左シフト(2倍)にxを加えた場合です。 本問は2ビットシフトなので、4倍にxを加えて5倍になります。 2:× 4倍は、2ビット左シフトだけを行った時点の値です。 その後にxを加える操作が残っているため、最終的には5倍になります。 3:○ 2ビット左シフトで4x、そこにxを加えて5xとなります。 シフトと加算を組み合わせると、乗算命令を使わずに5倍を計算できます。 4:× 6倍にするには、例えば4x+2x(2ビットシフトの値に1ビットシフトの値を加える)が必要です。 本問の操作ではxを1回加えるだけなので5倍です。 【ポイント】 左シフトはnビットで2^n倍、論理右シフトはnビットで2^n分の1(端数切捨て)になります。 「シフトと加算で何倍か」は頻出なので、4x+x=5x、8x+2x=10x のように分解して考えると確実です。まとめて解く
修了試験 2017-07-23実施分を通しで解く(80問)→