なぜ答えは42なのでしょうか?質問する

なぜ答えは42なのでしょうか?質問する

この回文式がどのようにして 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"両方が数値の場合(つまり、結果を数値に強制変換できます)。ab[0]+[1]

[a] * [b]

どうやら、単一要素配列に対して乗算を実行できるようです。したがって、これは と同等ですa*b

ついに、

a << b

左シフト演算子。正の整数の場合、これは実質的に 2 の 乗を掛け合わせますb。上記の式では、これは とともに使用されるためb = 0、結果は となりa、整数に強制変換されます。

正しい演算順序を適用すると、[2] * [21]と評価される が得られます42

おすすめ記事