Javascript 为什么答案是42?
我试图理解这个回文表达式是如何给出42的。我知道运算符优先级规则,但这超出了我当前的Javascript级别。我怎么开始Javascript 为什么答案是42?,javascript,Javascript,我试图理解这个回文表达式是如何给出42的。我知道运算符优先级规则,但这超出了我当前的Javascript级别。我怎么开始 alert ("The answer is " + [(0>>(0==0))+([0]+[(0==0)+(0==0)]^0)]*[(0^[(0==0)+(0==0)]+[0])+((0==0)<<0)] ); alert(“答案是”+ [(0>>(0==0))+([0]+[(0==0)+(0==0)]^0]*[(0^[(0==0)+(0==0)]
alert ("The answer is " +
[(0>>(0==0))+([0]+[(0==0)+(0==0)]^0)]*[(0^[(0==0)+(0==0)]+[0])+((0==0)<<0)]
);
alert(“答案是”+
[(0>>(0==0))+([0]+[(0==0)+(0==0)]^0]*[(0^[(0==0)+(0==0)]+[0]+((0==0)[(0>>(0==0))+([0]+[(0==0)+(0==0)]^0]*[(0^[(0=(0==0)+(0)]+[0])+[0])+((0==0])+((0==0)(0)因为0==0)是因为
(0>>(0==0))==0
因为
(0==0)==true
(0>>true)==0
(true
强制为1
)
([0]+[(0==0)+(0==0)]^0==2
因为
(0==0)+(0==0)==2
[0]+[2]==“02”
'02'^0==2
('02'
强制为2
)
(0^[(0==0)+(0==0)]+[0])+((0==0)基本元素如下:
0==0
这是true
,可以强制为1
a >> b
右移运算符。在本例中,它仅在表达式的开头用作0>>1
,其计算结果为0
a^b
按位异或。上述两种用法都有a
或b
是0
,因此结果是非零操作数,强制为整数
[a] + [b]
a
和b
的字符串相加,计算结果为“ab”
;如果a
和b
都是数字(例如[0]+[1]
,则结果可以强制为数字
[a] * [b]
显然,乘法可以在单元素数组上执行。因此这相当于a*b
最后,
a << b
a首先打开JavaScript控制台,查看true+true
的计算结果。如果您知道运算符优先级,那么您可以将其重写为多行,然后一次执行一个操作。为什么答案是42?
我有一个工作程序来找出问题所在,但这需要很长时间g运行时间…也是。这不是代码。不要编写这样的代码。如果您要维护这样编写的代码,请重写它。此外,我也忍不住发布。可能值得注意的是移位运算符在移位之前截断浮点。您有一个拼写错误0^'20'==20('02'强制为2)应该是0^'20'==20('20'强制转换为20)不客气。我相信,在这种情况下,按位异或用于将字符串转换为数字类型。