【发布时间】:2011-12-11 18:16:51
【问题描述】:
>>> var foo = [1,2]
>>> var bar = [3,4]
>>> foo ^ bar
0
>>> foo ^ 3
3
>>> 1^3
2
运算符的目的是什么:^?
编辑 1:你能解释一下原因吗
>>> foo ^ bar
0
?
【问题讨论】:
标签: javascript syntax
>>> var foo = [1,2]
>>> var bar = [3,4]
>>> foo ^ bar
0
>>> foo ^ 3
3
>>> 1^3
2
运算符的目的是什么:^?
编辑 1:你能解释一下原因吗
>>> foo ^ bar
0
?
【问题讨论】:
标签: javascript syntax
在1^3 的情况下,XOR 运算符会执行一些二进制操作以获得 2。
1 = 00000001 ^
3 = 00000011
========
00000010 = 2
当您开始使用它进行数学运算时,JavaScript 会将数组语法 [x,y] 视为 NaN。 NaN 被解释为 0 当您对其进行按位运算时,因此考虑到这一点,foo 和 bar 数学开始变得有意义:
foo => NaN = 00000000 ^
bar => NaN = 00000000
========
00000000 = 0
foo => NaN = 00000000 ^
3 = 00000011
========
00000011 = 3
这似乎是正确的。 [1,2]^7 = 7、[1,2,3]^9 = 9等
【讨论】:
+[1,2] 是NaN,NaN ^ 3 是3,因为NaN 将在11.10 节中定义的ToInt32 操作中转换为0 ECMAScript 规范。
它被称为位运算符之一,它将它们的操作数视为32位(零和一)的序列,而不是十进制,十六进制或八进制数。按位异或(a ^ b)在每个位中返回一个一个但不是两个操作数的对应位都是 1 的位置。
编辑:
a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0
还有
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
--------------------------------
14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)
【讨论】:
【讨论】: