C ++中的XOR操作

时间:2013-09-28 13:05:03

标签: c++

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才为真。

5 个答案:

答案 0 :(得分:12)

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

首先评估1 ^ 3

0 0 0 1 // 1

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

结果是2,那么这个数字是最后一个xor操作的第一个操作数(2 ^ 7

0 0 1 0 // 2  

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

结果是5。

答案 1 :(得分:4)

  1. XOR按位运行,分别对每个位置进行异或运行
  2. XOR是可交换的,所以a ^ b = b ^ a
  3. XOR是关联的,因此(a ^ b)^ c = a ^(b ^ c)
  4. 使用它,人可以计算给定位置中的1的数量,并且结果位被精确地设置为操作数的给定位置中的奇数个。

    计数得分(0101)二进制= 5

答案 2 :(得分:4)

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

虽然实际上这个^运算符是关联的:当且仅当奇数个操作数设置了位时,才会设置结果中的每个位。

答案 3 :(得分:3)

表达式被解析为(1 ^ 3) ^ 7,因此您首先得到

 0001 ^ 0011 

0010。其余的是

 0010 ^ 0111

0101

答案 4 :(得分:0)

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

1 ^ 3 == 2

2 ^ 7 == 5