科目B
基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問6
次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 rev は 8 ビット型の引数 byte を受け取り,ビットの並びを逆にした値を返す。例えば,関数 rev を rev(01001011) として呼び出すと,戻り値は 11010010 となる。
なお,演算子 ∧ はビット単位の論理積,演算子 ∨ はビット単位の論理和,演算子 >> は論理右シフト,演算子 << は論理左シフトを表す。例えば,value >> n は value の値を n ビットだけ右に論理シフトし,value << n は value の値を n ビットだけ左に論理シフトする。
〔プログラム〕
○8 ビット型: rev(8 ビット型: byte)
8 ビット型: rbyte ← byte
8 ビット型: r ← 00000000
整数型: i
for (i を 1 から 8 まで 1 ずつ増やす)
endfor
return r
答えを選ぶ
出典:基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問6(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ア
覚える知識
ビット並びの反転(シフトとマスク)
最下位ビットを AND マスクで 1 ビットずつ取り出し、結果のほうを左シフトしながら OR で追加していくと、ビットの並びが逆になる。
この問題で必要なこと
毎回 rbyte ∧ 00000001 で最下位ビットを取り出し、r を 1 ビット左にシフトしてから論理和で右端に入れる。そのあと rbyte を 1 ビット右にシフトして次のビットを用意する。8 回で並びが逆になるのでアが正解。
ひっかけ
シフト量を 7 にする(イ)と途中のビットが消える。ウ・エは循環シフト(ローテート)で、並びを反転するものではない。