Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么答案是42?_Javascript - Fatal编程技术网

Javascript 为什么答案是42?

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)]

我试图理解这个回文表达式是如何给出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)]+[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)不客气。我相信,在这种情况下,按位异或用于将字符串转换为数字类型。