
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
ビットシフトとビットマスクを用いたPythonプログラム(x=3、bit=1<<x、mask=1<<7を右へ1ビットずつシフトしながら8回繰り返して0/1を出力)の実行結果として最も適切なものを選ぶ問題。
ビットマスクで各ビットを調べて2進表記を出力するプログラムの出力を求める問題。
① Pythonでは&は==より先に計算される → (bit & mask)==0。maskは128から右へ1つずつずれて、上位ビットから順に調べる
② bit=1<<3=8=00001000。上から5番目(mask=8)のときだけ1になる
③ 00001000(①)
x=3なので、bit=1<<3=8(2進数で00001000)である。mask=1<<7=128(10000000)から始め、ループごとに右へ1ビットシフトする。Pythonでは、ビット演算子&の優先順位は比較演算子==より高いため、条件は(bit & mask)==0となる。maskの値は、i=0〜7で順に128、64、32、16、8、4、2、1である。bit(8)とのANDが0でないのは、mask=8のとき(i=4)だけで、その回に1を出力し、それ以外は0を出力する。出力は、0000 1 000、すなわち00001000であり、①が正しい。
1<<xは2^xで、xビット目だけが1の値。maskを最上位から右へシフトしながらbit&maskを調べることで、bitの2進表現を上位ビットから出力できる。Pythonでは&が比較演算子より優先される(Cとは異なる)。
キーワード: Python、ビット演算、ビットマスク、シフト演算、2進数表示、プログラミング、情報工学部門