我们熟悉逻辑运算,主要是AND和OR,以及XOR,这也很重要。
本文介绍了异或运算的含义和应用。
一、含义
XOR是异或的缩写。Exclusive在英语中的意思是“排他的,唯一的”,可以理解为XOR是比较简单的OR运算。
我们知道,OR运算的运算符有两种,结果都是真的。
1)一个是真的,一个是假的;
2)两者都是真的。
以上两种情况有时需要明确区分,所以引入异或。
XOR排除了第二种情况,只有第一种情况一个运算符为真,另一个为假)才会返回true,所以可以认为是比较简单的OR运算。即XOR主要用于判断两个值是否不同。
异或一般用插入符号表示。如果0为假,1为真,异或的运算真值表如下。
0 ^ 0=00 ^ 1=11 ^ 0=11 ^ 1=0
二、运算定律
异或运算有以下运算规律。因为很简单,这里省略了证明。
1)值与自身之间的运算总是假的。
X x=0 2)值和0之间的运算总是等于它自己。
X 0=x 3)可交换性
X y=y x 4)绑定
^y ^ z)=^ y)^ z
三、应用
根据上述运算规律,可以得到XOR运算的许多重要应用。
00-1010个以上值的异或运算可以根据运算规律进行简化。
a ^ b ^ c ^ a ^ b=a ^ a ^ b ^ b ^ c=0 0 c=c
3.1 简化计算
两个变量连续三次异或运算,可以互相交换值。
假设两个变量是X和Y,它们各自的值是A和b,下面是X和Y三次的异或运算,音符是每次运算后两个变量的值。
X=x y//a b,b) y=x y//a b,a b b)=a b,a) x=x y//a b a,a)=b,a)这是
3.2 交换值
异或运算可用于加密。
第一步,对明文和密钥进行异或运算,得到密文。
文本密钥=密文第二步,将密文和密钥再次进行异或运算,可以恢复为明文。
密文密钥=文本原理很简单。如果明文是X,密钥是Y,那么X连续两次与Y进行异或运算得到自己。
x ^ y) ^ y=x ^ y ^ y)=x ^ 0=x
3.3 加密
异或运算可用于数据备份。
x和Y进行异或运算,产生备份文件z
x y=z后,无论是文件x还是文件y损坏,只要两个原始文件没有同时损坏,就可以根据另一个文件和备份文件进行恢复。
X z=X X Y)=X X) Y=0 Y=Y上面的例子是Y受损,X和Z异或得到Y。
00-1010面试中的一些算法题也可以通过异或运算快速解决。
请看下面的问题。
数组包含n-1个成员,这些成员是从1到n的整数,并且不重复。请找出丢失的号码。
最快的解决方法是将所有数组成员A[0]到A[n-2])和从1到n的整数放在一起进行异或运算。
A [0] a [1].a [n-2] 1 2.n在上面的公式中,每个数组成员会出现两次,相同的值会被异或得到0。只有缺失的数字出现一次,所以最终结果就是这个值。
你可能会想,加法也可以解决这个问题。
2.n-a [0]-a [1]-.-a [n-2]但是,加法的速度没有异或运算快,需要额外的空间。如果数量大,就有溢出的可能。
下面是一个类似的题目,可以作为练习。
一个数组包含n 1个成员,是1到n之间的整数,只有一个成员出现两次,其他成员只出现一次。请找出重复出现的数字。
3.4 数据备份
异或技巧[1]
结束)
四、一道面试题
[1]异或Trick:https://florian.github.io/xor-trick/
168飞艇6种不亏钱的方法简单。如果明文是X,密钥是Y,那么X连续两次与Y进行异或运算得到自己。
x ^ y) ^ y=x ^ y ^ y)=x ^ 0=x
3.3 加密
异或运算可用于数据备份。
x和Y进行异或运算,产生备份文件z
x y=z后,无论是文件x还是文件y损坏,只要两个原始文件没有同时损坏,就可以根据另一个文件和备份文件进行恢复。
X z=X X Y)=X X) Y=0 Y=Y上面的例子是Y受损,X和Z异或得到Y。
00-1010面试中的一些算法题也可以通过异或运算快速解决。
请看下面的问题。
数组包含n-1个成员,这些成员是从1到n的整数,并且不重复。请找出丢失的号码。
最快的解决方法是将所有数组成员A[0]到A[n-2])和从1到n的整数放在一起进行异或运算。
A [0] a [1].a [n-2] 1 2.n在上面的公式中,每个数组成员会出现两次,相同的值会被异或得到0。只有缺失的数字出现一次,所以最终结果就是这个值。
你可能会想,加法也可以解决这个问题。
2.n-a [0]-a [1]-.-a [n-2]但是,加法的速度没有异或运算快,需要额外的空间。如果数量大,就有溢出的可能。
下面是一个类似的题目,可以作为练习。
一个数组包含n 1个成员,是1到n之间的整数,只有一个成员出现两次,其他成员只出现一次。请找出重复出现的数字。
3.4 数据备份
异或技巧[1]
结束)
四、一道面试题
[1]异或Trick:https://florian.github.io/xor-trick/