ネタ元:同じ値であること(その2)
aとbとcがすべて等しいという条件式を作ろうとして
数学のようにa=b=cと書いてしまう人はよくいます。
昔のBASICだと、if文の外でこのように書くとaに-1が代入されたりします。
a=(b=c)と解釈され、(b=c)がtrueを意味する-1になるからです。
そして、こんな書式も生まれました。
I$=INKEY$
x=x+(I$="4")-(I$="6")
y=y+(I$="8")-(I$="2")
I$は変数名で、INKEY$とは入力された文字を取得する関数です。
つまり、4が入力されればxは-1され、6が入っていればxは+1されます。
要はキャラクターやカーソルを動かす部分です。
さらに、a=b=c=dはどうなるでしょうか。
普通に解釈されるならa=(b=(c=d))ですね。
しかし、(a=b)=(c=d)と捕えてみましょう。
a=bがtrue 、c=dがtrue で全体がtrue
a=bがtrue 、c=dがfalseで全体がfalse
a=bがfalse、c=dがtrue で全体がfalse
a=bがfalse、c=dがfalseで全体がtrue
これは、排他的論理和(XOR)の否定を意味します。
排他的論理和の演算子を用意していない言語でも、
中央の等号をnot equalの記号にすれば排他的論理和を使うことができます。