XOR 执行什么数学运算?
6 回答
XOR 是一种二元运算,它代表“异或”,也就是说,如果仅设置了一个位,则结果位的计算结果为 1 。
这是它的功能表:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
此操作在数字的每两个对应位之间执行。
示例:7 ^ 10
二进制:0111 ^ 1010
0111
^ 1010
======
1101 = 13
性质:运算是可交换的、结合的和自逆的。
它也与加法模 2 相同。
^
是Python 按位异或运算符。这就是你XOR
在 python 中的拼写方式:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR 代表异或。它用于密码学,因为它可以让您在可逆操作中使用掩码“翻转”位:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
5
面具在哪里;(输入异或掩码)异或掩码再次为您提供输入。
关于异或运算的更多信息。
- XOR 一个数字与自身奇数次的结果是数字本身。
- 与自身异或偶数次,结果为 0。
- 此外,与 0 的 XOR 始终是数字本身。
其他答案在这里没有提到的一件事是带有负数的 XOR -
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
虽然您可以使用上面的函数表轻松理解 XOR 将如何工作,但它并没有说明它将如何处理负数。
XOR 如何处理负数:
由于这个问题也被标记为 python,所以我会考虑到这一点来回答它。XOR ( ^
) 是一个逻辑运算符,当位不同时返回 1,其他位置返回 0 。
负数以二进制形式存储为二进制补码。在 2 的补码中,最左边的位位置是为值的符号(正或负)保留的,对数字的值没有贡献。
在Python中,负数用前导一而不是前导零写入。因此,如果您仅将 8 位用于二进制补码 ,那么您将模式 from视为 0
00000000
到01111111
127 的整数,并保留1xxxxxxx
用于写入负数。
考虑到这一点,让我们通过一个示例来了解 XOR 如何对负数起作用。让我们考虑表达式 - ( -5 ^ -3 )
。
- 的二进制表示
-5
可以被认为是1000...101
和 - 的二进制表示
-3
可以被认为是1000...011
。
这里,...
表示全 0,其数量取决于用于表示的位数(32 位、64 位等)。MSB (最高有效位)处的1
at表示二进制表示的数字为负数。XOR 操作将照常对所有位进行。
异或运算:
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
∴ -5 ^ -3 = 6
由于异或运算后MSB变为0,所以我们得到的结果数是一个正数。同样,对于所有负数,我们考虑使用2 的补码(最常用的一种)以二进制格式表示它们,并对它们的二进制表示进行简单的 XOR。
结果的MSB 位将表示符号,其余位将表示 最终结果的值。
下表可用于确定结果的符号。
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
XOR 的基本规则对于负 XOR 操作也保持不变,但是该操作如何在负数中真正起作用有一天可能对某人有用。
另一个应用XOR
是在电路中。它用于对位求和。
当您查看真值表时:
x | y | x^y
---|---|-----
0 | 0 | 0 // 0 plus 0 = 0
0 | 1 | 1 // 0 plus 1 = 1
1 | 0 | 1 // 1 plus 0 = 1
1 | 1 | 0 // 1 plus 1 = 0 ; binary math with 1 bit
您可以注意到,结果XOR
是 x 与 y 相加,没有跟踪进位位,进位位是从AND
x 和 y 之间获得的。
x^y // is actually ~xy + ~yx
// Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
(^) XOR 运算符在应用于两个不同的位(0 和 1)时生成 1。当它应用于两个相同的位(0 和 0 或 1 和 1)时,它会生成 0。