この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ア

解説

この問題は図で定義された関数 next(n) を求めるものです。図は [DIAGRAM_HERE] で示されていますが、問題文の「0以上255以下の整数nに対して」という条件と選択肢から推測できます。next(n) は n が 255 未満のとき n+1 を返し、n が 255 のとき 0(ラップアラウンド)を返す関数と考えられます。これは 8 ビット加算のオーバーフロー処理そのものです。(n+1) AND 255 を計算すると、n が 0〜254 の場合は n+1 がそのまま得られ、n=255 のとき (255+1)=256 で 256 AND 255 = 0x100 AND 0xFF = 0 となりラップアラウンドします。したがって選択肢 a が正解です。AND 255 は下位 8 ビットのマスクとして機能し、256(= 0x100)以上の値を 0 に戻します。

なぜ他の選択肢は違うのか

選択肢 イ
(n+1) AND 256 は 256(= 0x100)との AND を取ります。256 は 2 進数で 100000000 なので、下位 8 ビットはすべて 0 です。結果は常に 0 か 256 しか得られず、next(n) の動作を再現できません。
選択肢 ウ
(n+1) OR 255 は 255(= 0xFF)との OR を取ります。n+1 の下位 8 ビットをすべて 1 にするため、結果は常に 255 以上になってしまい、正しい次の値を返せません。
選択肢 エ
(n+1) OR 256 は 256(= 0x100)との OR を取ります。第 9 ビットを強制的に 1 にするため、結果は常に 256 以上になり、0〜255 の範囲に収まりません。

解くときのポイント

AND 演算はビットマスクとして機能する。AND 255(= AND 0xFF)は「下位 8 ビットのみ取り出す」操作。8 ビット加算のラップアラウンドは (n+1) AND 0xFF と覚える。OR は「ビットを立てる」AND は「ビットを落とす(マスク)」と区別する。