令和6年度 III-6

科目: 専門科目 / 分野: 情報工学部門 / 年度: 令和6年度

III-6 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

ビットシフトとビットマスクを用いた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進数表示、プログラミング、情報工学部門