修了試験 2020-06-14実施分 基本情報技術者試験 問1
数値を2進数で格納するレジスタがある。 このレジスタに正の整数xを設定した後,“レジスタの値を2ビット左にシフトして,xを加える”操作を行うと,レジスタの値はxの何倍になるか。 ここで,あふれ(オーバフロー)は,発生しないものとする。
正答3
解説
正解は3です。 2進数のシフト演算と、数値の倍数の関係を問う問題です。 2進数では、1ビット左にシフトすると値が2倍になります。 したがって、2ビット左にシフトすると値は4倍になります。 【計算】 初めにレジスタへxを設定します。 2ビット左シフトすると、値は x×2×2=4x になります。 これにxを加えると、4x+x=5x になります。 よって、レジスタの値はxの5倍です。 【選択肢別解説】 1:× 3倍は、1ビット左シフト(2倍)してxを加えた場合の値です。 本問は2ビットのシフトなので5倍になります。 2:× 4倍は、2ビット左シフトしただけの値です。 シフト後にxを加えるので、正しくは5倍です。 3:○ 2ビット左シフトで4x、xを加えて5xとなるため、5倍が正しい値です。 4:× 6倍になるのは、例えば1ビット左シフト(2x)と2ビット左シフト(4x)を足した場合です。 本問の操作では5倍です。 【ポイント】 左シフトはnビットで2のn乗倍、右シフトは2のn乗分の1になります。 「シフトと加算の組合せで掛け算を作る」問題は頻出なので、4x+x のように式で整理すると確実です。まとめて解く
修了試験 2020-06-14実施分を通しで解く(80問)→