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才为真。
答案 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的数量,并且结果位被精确地设置为操作数的给定位置中的奇数个。
计数得分(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