0以上255以下の整数nに対して,
next(n) = { n+1 (0≦n<255),0 (n=255) }
と定義する。
next(n)と等しい式はどれか。
ここで,x AND y及びx OR yは,それぞれxとyを2進数表現にして,桁ごとの論理積及び論理和をとったものとする。
正答1
解説
正解は1です。
next(n)は、nに1を足し、255の次だけ0に戻す関数です。
これは「n+1を256で割った余り」と同じで、8ビットの下位だけを残す操作に当たります。
【選択肢別解説】
1:○ 255は2進数で11111111なので、AND 255は下位8ビットだけを取り出す操作です。
n<255ならn+1は255以下で、AND 255をとっても値は変わりません。
n=255ならn+1=256(100000000)の下位8ビットはすべて0なので、結果は0になり定義と一致します。
2:× 256は2進数で100000000なので、AND 256は9ビット目だけを残します。
n<255ではn+1が255以下なので結果は常に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となって256以上の値になり、n=255でも256となって0になりません。
【ポイント】
2のべき乗から1を引いた数とのANDは、その数で割った余りを求める操作と同じです。
8ビットのカウンタが255の次に0へ戻る動きは、AND 255で表せると覚えておきましょう。