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 仅在严格的操作数之一为真时才为真。
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 仅在严格的操作数之一为真时才为真。
因为运算符优先级和因为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。
使用它,人类可以计算给定位置中的 1 的数量,并且结果位被精确地设置为操作数的给定位置中的奇数个 1。
计数产生 (0101)binary=5
1 ^ 3 ^ 7
不是三个参数的函数,它是: (1 ^ 3) ^ 7
which equals 2 ^ 7
which equals 5
。
尽管实际上该^
运算符是关联的:当且仅当奇数个操作数设置了该位时,结果中的每个位都将被设置。
表达式被解析为(1 ^ 3) ^ 7
你首先得到
0001 ^ 0011
这是0010
。剩下的就是
0010 ^ 0111
这是0101
^ 是二元运算符。它不能同时对所有三个数字起作用,即 (1^3)^7,即:
1 ^ 3 == 2
2 ^ 7 == 5