为什么'^ 9等于9?
问题描述:
我读了一下按位JavaScript运算符here。为什么'^ 9等于9?
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
--------------------------------
14^9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)
想知道下面的表达式是如何9?
''^9
答
^
是一个按位运算符操作带符号的32位整数。
如果一个操作数不是一个32位整数,它将被转换为一个有符号的32位整数。
ToInt32
的行为在section 9.5 of the specification中定义为“让数字成为对输入参数调用ToNumber
的结果。”。 ToNumber
的细节被解释为here。实际上,ToNumber(x)
相当于+x
。
然后,9.5继续:“如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。”。
9.5其余步骤可以归结为 “减去/添加2 直到结果在范围[-2 ,2 -1]”。
适用于''^9
:
''^9
// ToInt32, step 1: ToNumber
0^9
// Bitwise XOR
9
适用于'string'^9
:
'string'^9
// ToInt32, step 1: ToNumber
NaN^9
// ToInt32, step 2
0^9
// Bitwise XOR
9
+1
优秀。令人信服的答案。谢谢。 – rajakvk 2013-05-11 10:05:10
感谢编辑@Rob W.我会在未来的小心。 – rajakvk 2013-05-11 10:21:29