次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数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
ビット反転は最下位を取り出し結果を左シフトして積む
○8ビット型: rev(8ビット型: byte)
8ビット型: rbyte ← byte
8ビット型: r ← 00000000
整数型: i
for (i を 1 から 8 まで 1 ずつ増やす)
endfor
return r
選択肢
- アr ← (r << 1) ∨ (rbyte ∧ 00000001) rbyte ← rbyte >> 1
- イr ← (r << 7) ∨ (rbyte ∧ 00000001) rbyte ← rbyte >> 7
- ウr ← (rbyte << 1) ∨ (rbyte >> 7) rbyte ← r
- エr ← (rbyte >> 1) ∨ (rbyte << 7) rbyte ← r
正解と解説
正解:ア r ← (r << 1) ∨ (rbyte ∧ 00000001) rbyte ← rbyte >> 1
ビット順を反転させる定石は、元の値から最下位ビットを1つずつ取り出し、結果側では左へ押し込んでいく方法です。rbyte ∧ 00000001 で最下位ビットだけを取り出し、rを1ビット左シフトしてから論理和で下端に加えます。その後 rbyte を1ビット右シフトして次のビットを最下位に持ってくれば、8回の繰返しで並びが逆になります。
選択肢ごとの解説
- ア正解。最下位ビットを取り出してrへ左から積み上げ、rbyteを1ビットずつ右へずらす。
- イ1回に7ビットも動かすため、8回の繰返しで桁が破綻する。
- ウrbyteを回転させているだけで、反転した値がrに蓄積されない。
- エ同じく回転操作であり、ビット順の反転にはならない。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問5
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数func1に与…2026年度 公開問題 科目B 問3
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数complementは、引数として渡された8ビット型…2026年度 公開問題 科目B 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 次のプログラムは、…2026年度 公開問題 科目B 問1
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数changeは、10より大きい整数を引数nで受け取り…2025年度 公開問題 科目B 問2
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。