1、异或简介
异或(^)操作运算规则为相同的为0,不同的为1
2、异或操作进行数字交换
我们现在有两个数a,b,我们可以通过异或操作对他们俩的数字进行交换
a = a ^ b
b = b ^ a
a = a ^ b
这样,这两个数字的值就进行了交换
我们举个例子,比如a = 97和b = 33
97的二进制为1100001
33的二进制为100001
首先进行 a = a ^ b
1 1 0 0 0 0 1
0 1 0 0 0 0 1
1 0 0 0 0 0 0
我们得到 a = 1000000 既 64
我们在进行b = b ^ a
0 1 0 0 0 0 1
1 0 0 0 0 0 0
1 1 0 0 0 0 1
我们得到 b = 110001 既 97
再进行最后的a = a ^ b
1 0 0 0 0 0 0
1 1 0 0 0 0 1
0 1 0 0 0 0 1
得到了a = 1 0 0 0 0 1 既33
这样,我们就为完成了两个数的交换
3、异或操作进行数字筛选
因为异或的特性,对于相同的二进制数为0,不同的为1
这样,不难得出 n ^ n ^ n … ^ n = 0 ,也就是说相同的数进行异或为0,不论有多少个
1 ^ 1 = 0
1 ^ 1 ^ 2 ^ 2 ^ 3 = 3
这一特性可以运用在Leetcode的389题找不同上面
4、异或操作进行数字筛选
在二进制中,所有的偶数末尾都是0,所有的奇数末尾都是1
如果一个数和1进行异或,如果是偶数的话,他的大小会+1,如果为奇数的话大小会-1