6

XOR 逻辑运算符如何处理两个以上的值?

例如,在诸如 1 ^ 3 ^ 7?

0 0 0 1 // 1

0 0 1 1 // 3

0 1 1 1 // 7

__

0 1 0 1 // 5

出于某种原因,产生 0 1 0 1,正如我所想的那样,它应该产生:0 1 0 0,因为 XOR 仅在严格的操作数之一为真时才为真。

4

5 回答 5

14

因为运算符优先级和因为xor是二元运算符,在这种情况下是从左到右。

首先1 ^ 3是评估

0 0 0 1 // 1

0 0 1 1 // 3
-------
0 0 1 0 // 2

结果是2,那么这个数就是最后一个异或运算的第一个操作数(2 ^ 7

0 0 1 0 // 2  

0 1 1 1 // 7
-------
0 1 0 1 // 5

结果是 5。

于 2013-09-28T13:10:43.473 回答
4
  1. XOR 按位工作,分别对每个位置进行 XOR
  2. XOR 是可交换的,所以 a^b = b^a
  3. XOR 是关联的,所以 (a^b)^c = a^(b^c)

使用它,人类可以计算给定位置中的 1 的数量,并且结果位被精确地设置为操作数的给定位置中的奇数个 1。

计数产生 (0101)binary=5

于 2013-09-28T13:08:28.753 回答
4

1 ^ 3 ^ 7不是三个参数的函数,它是: (1 ^ 3) ^ 7which equals 2 ^ 7which equals 5

尽管实际上该^运算符是关联的:当且仅当奇数个操作数设置了该位时,结果中的每个位都将被设置。

于 2013-09-28T13:08:54.363 回答
3

表达式被解析为(1 ^ 3) ^ 7你首先得到

 0001 ^ 0011 

这是0010。剩下的就是

 0010 ^ 0111

这是0101

于 2013-09-28T13:08:57.613 回答
0

^ 是二元运算符。它不能同时对所有三个数字起作用,即 (1^3)^7,即:

1 ^ 3 == 2

2 ^ 7 == 5

于 2013-09-28T13:08:37.483 回答