「平成31年春季午前問1」定義された式と同様の式を選択する問題

問題

出典:応用情報技術者平成31年春季午前問1
0以上255以下の整数nに対して、

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

ア:(n+1) AND 255
イ:(n+1) AND 256
ウ:(n+1) OR 255
エ:(n+1) OR 256


解説

まず考えなければいけないのは、next(x)の定義が何を意味しているのか?という点であろう。

n+1 (0<=n<255)が何を表しているのか?
0 (n=255)は何を言いたいのか?

まるで意味不明である。最初の一問目から受験者の心を揺さぶろうという魂胆だろうか。

さて、最初の一行を読んでみると、
「0以上255以下の整数」と書いてある。

そして、次に定義内容のカッコ内を見てみる。
(0<=n<255)は0から254の値を表しており、
(n=255)はそのまま255を表している。

要は、「0以上255以下の整数」の値についての振る舞いについて記述してあるのである。

・nが0以上255未満ならば、n+1である。
・nが255ならば、0である。

ということを言っているに過ぎない。

つまりnext(n)のnに100を入れたら、101が返ってくるのである。
さらには、next(n)のnに255を入れたら、0が返ってくるのである。

それだけの単純な話を、さも難しそうに書いてあるだけである。初っ端で脅かしにかかっているのだろう。

そんなこんなで話の仕組みが分かったので、選択肢と照らし合わせてみるとしよう。

「next(n)と等しい式はどれか?」というのが問いである。

仕組みが分かったので、選択肢を見てみるのだが、どうにも該当するような式が見当たらない。
何故ならば、「ここで、x AND y 及び x OR yは、それぞれxとyを2進数表現にして、桁ごとの論理積及び論理和をとったものとする。」という注釈があるからである。

「2進数で考えろ、ANDなら論理積で解釈しろ、ORなら論理和で解釈しろ」なんて無理難題を要求している。

ANDの論理積は、両方とも1ならば1を返す。
ORの論理和は、どっちかが1ならば1を返す。
という仕組みだ。

選択肢の式を試して、
———————
つまりnext(n)のnに100を入れたら、101が返ってくるのである。
さらには、next(n)のnに255を入れたら、0が返ってくるのである。
———————
を再現できれば、それが答えになるという次第だ。

255は2進数で表すと「11111111」である
すると、OR条件だと、絶対に255以上の値を返却することになってしまう。
なので、OR条件の選択肢は除外である。
さっきの話ならば、100を入れたら255が返却されるのだから、おかしい。

なので、答えはAND条件の奴のどちらかになる。
そこで、もう一つの条件を思い出そう。
「255を入れたら、0が返却される」という条件だ。

イの選択肢だと、255という値を入れた時、(255+1)AND256となり、
これを2進数で表すと
100000000
AND
100000000
となり、結果は
100000000
であるので、256となる。結果が想定と違う。255を入れた時は0を返したいのである。

ということで、消去法的に答えはアとなる。

アの場合は、255を入れると
100000000
AND
011111111
で結果は、000000000となり、0が返るのである。想定通りである。