1≠2のC言語による証明のトリックの解説。
・その1
if(a=b)についてはa=bを実行した後、aの値を判定する。
Cでは0以外は真のため、a=bも真と判定される(a==2のため)。
・その2
int型は整数型のため少数は0に切り捨てられる。よって
a=b=0と扱われるためa*10==b*10なのである。
・その3
#defineの仕様によるトリック。Aへは2-0が、Bへは2-1が「そのまま」代入される。
つまりA*Bは2-0*2-1になるため1が出力されるのである。
この記事書いてていろいろ学ぶこともあった。メモメモ。
PR