next(n)と等しい論理式

正解は「ア」です。 関数 next(n) は、引数 n が 0 以上 254 以下のときは n+1 を返し、n が 255 のときは 0 を返す(巡回加算する)仕様です。 255 を 8 ビット 2 進数で表すと「11111111」、256 は「100000000」(9 ビット)となります。各選択肢のビット演算の動作は次のとおりです。 ・ア:(n+1) AND 255 「AND 255」は下位 8 ビットを取り出し、9 ビット目以上の桁上がりをマスクする(0 にする)論理積です。 0 ≦ n ≦ 254 のとき:n+1 は 1 〜 255(00000001〜11111111)となり、AND 255 を施してもそのまま n+1 が返ります。 n = 255 のとき:n+1 は 256(2進数で 100000000)となり、下位 8 ビットはすべて 0 です。AND 255 を施すと結果は 0 となり、仕様を完全に満たします。 ・イ:(n+1) AND 256 「AND 256」は 9 ビット目(256 の位)のみを取り出す処理です。0 ≦ n ≦ 254 では結果が常に 0 となってしまうため誤りです。 ・ウ:(n+1) OR 255 「OR 255」は下位 8 ビットをすべて 1 にする処理です。0 ≦ n ≦ 254 では常に 255、n = 255 では 511 が返るため誤りです。 ・エ:(n+1) OR 256 「OR 256」は 9 ビット目を強制的に 1 にする処理です。結果は常に 256 以上の値となるため誤りです。 n n+1(2進数) AND 255(11111111) next(n) 5 0 00000110 00000110 6 254 0 11111111 11111111 255 255 1 00000000 00000000 0 AND 255 は 下位8ビットだけを残す マスクです。n=255 のとき n+1=256 の9ビット目(桁あふれ)が消えて0になります。

0以上255以下の整数nに対して、

next(n)={n+1(0≤n<255)0(n=255)next(n)=\begin{cases}n+1&(0\le n<255)\\ 0&(n=255)\end{cases}

と定義する。next(n)と等しい式はどれか。ここで、x AND y及びx OR yは、それぞれxとyを2進数表現にして、桁ごとの論理積及び論理和をとったものとする。

出典令和5年度 春期 高度情報処理技術者試験 午前Ⅰ 問1
ア
(n+1) AND 255
イ
(n+1) AND 256
ウ
(n+1) OR 255
エ
(n+1) OR 256