この回文式がどのようにして 42 を返すのかを理解しようとしています。演算子の優先順位のルールについては知っていますが、これは現在の私の JavaScript レベルを超えています。どうすれば始められるでしょうか?
alert ("The answer is " +
[(0>>(0==0))+([0]+[(0==0)+(0==0)]^0)]*[(0^[(0==0)+(0==0)]+[0])+((0==0)<<0)]
);
ベストアンサー1
基本的な要素は次のとおりです。
0==0
これは でありtrue
、 に強制変換できます1
。
a >> b
右シフト演算子。この場合、0 >> 1
と評価される式の先頭でのみ使用されます0
。
a^b
ビット単位の XOR。上記の両方の使用法では、a
またはのいずれかが使用されb
ている0
ため、結果はゼロ以外のオペランドが整数に強制変換されます。
[a] + [b]
a
との文字列加算はb
と評価されます。と の"ab"
両方が数値の場合(つまり、結果を数値に強制変換できます)。a
b
[0]+[1]
[a] * [b]
どうやら、単一要素配列に対して乗算を実行できるようです。したがって、これは と同等ですa*b
。
ついに、
a << b
左シフト演算子。正の整数の場合、これは実質的に 2 の 乗を掛け合わせますb
。上記の式では、これは とともに使用されるためb = 0
、結果は となりa
、整数に強制変換されます。
正しい演算順序を適用すると、[2] * [21]
と評価される が得られます42
。