异或操作可以理解为一个半加法器,加法器是根据两个输入获取一个输出,输出分为结果位和进位:
结果位运算规则为:相同输出0,不同输出1,这也是异或的运算规律。
进位运算规则就是按位与:两个都为1时才为1,其他为0.
异或的使用场景:
1、交换两个变量,不需要临时变量
a = a ^ b;
b = b ^ a;
a = a ^ b;
2、快速判断两个数字是否相等
(a ^ b) == 0
3、加密解密,一个数a异或密钥b,再用结果c异或密钥b就又得到a
c = a ^ b
d = c ^ b
此时 a == d
原理:
(a ^ b) ^ b
= a ^ (b ^ b) //异或运算的结合性
= a ^ 0 //任何一个数和自身异或等于0
= a //任何数和0异或等于该数
3、文件备份(数据备份)
假定有两个文件 a b,根据a b异或得出c文件,此时只要a和b不是同时损坏,就可以根据c得到任意一个a或b文件:
c = a ^ b
b = a ^ c(a ^ (a ^ b) = a ^ a ^ b = 0 ^ b = b)
上面几个应用都是基于异或运算的一个特性:结合性
x ^ (y ^ z) = (x ^ y )^ z