【异或运算】

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
在python中用^表示,如下代码(注意是二进制表示)。

1 ^ 0 #结果为1,因为1和0不同

0 ^ 1 #结果为1,因为0和1不同

1 ^ 1 #结果为0,因为1和1相同

0 ^ 0 #结果为0,因为0和0相同
二、异或运算的性质
交换律:A ^ B = B ^ A;
结合律:A ^ (B ^ C) = (A ^ B) ^ C;
恒等律:X ^ 0 = X;
归零律:X ^ X = 0;
自反:A ^ B ^ B = A ^ 0 = A;
对于任意的 X: X ^ (-1) = ~X;
如果 A ^ B = C 成立,那么 A ^ B = C,B ^ C = A;
三、异或运算的实例
以 5 ^ 3 为例,理解python中异或运算的过程
首先python会将5和3转换为二进制:101^011
然后按位求异或结果:110
最后转换成十进制,结果为6

三、异或运算的应用
交换两个数
a, b = 5, 3
a = a ^ b
b = a ^ b
a = a ^ b
print(a, b)
不出所料,最后的输出是a=3和b=5。
这个用法实际上利用了异或的这个特性:

x^0=x

x^x=0

消除影响(1720. 解码异或后的数组)
简单来说,就是对一个数异或两次,就能消除这个数引发的影响了。
def decode(self, encoded: List[int], first: int) -> List[int]:
ans = [first]
for num in encoded:
ans.append(ans[-1] ^ num)
return ans
类似的题目还有 136. 只出现一次的数字
3.计算汉明距离( 461. 汉明距离)

def hammingDistance(self, x, y):
    return bin(x^y).count('1')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值