0以上255以下の整数nに対して,
next(n)=n+1 (0≦n<255)
next(n)=0 (n=255)
と定義する。
next(n)と等しい式はどれか。
ここで,x AND y及びx OR yは,それぞれxとyを2進数表現にして,桁ごとの論理積及び論理和をとったものとする。
正答1
解説
正解は1です。
next(n)は、0〜254では1を足し、255の次は0に戻る8ビットの周回加算です。
255は2進数で11111111(下位8ビットがすべて1)なので、AND 255をとると下位8ビットだけが残ります。
【計算】
n<255のとき、n+1は1〜255で8ビットに収まるので、(n+1) AND 255=n+1です。
n=255のとき、n+1=256=100000000(2進数)です。
256 AND 255=100000000 AND 011111111=0です。
よって、すべてのnで(n+1) AND 255=next(n)が成り立ちます。
【選択肢別解説】
1:○ 下位8ビットだけを取り出すので、255の次が0に戻ります。
上の計算のとおり、すべてのnでnext(n)と一致します。
2:× 256は2進数で100000000で、下位8ビットはすべて0です。
n<255ではn+1の9ビット目が0なので結果は常に0になり、n+1になりません。
3:× OR 255は下位8ビットをすべて1にします。
例えばn=0のとき1 OR 255=255となり、正しい値の1になりません。
4:× OR 256は9ビット目を1にするので、n<255では結果がn+1+256になります。
n=255のときも256 OR 256=256で、0になりません。
【ポイント】
AND 255(0xFF)は下位8ビットを取り出す「マスク」の定番です。
2のべき乗2^kで割った余りは、AND (2^k-1)で求められると覚えておきましょう。