作者:阮一峰
日期:2021年1月27日大家比较熟悉的逻辑运算,主要是"与运算"(AND)和"或运算"(OR),还有一种"异或运算"(XOR),也非常重要。本文介绍异或运算的含义和应用。一、含义
XOR 是exclusive OR 的缩写。英语的 exclusive 意思是"专有的,独有的",可以理解为 XOR 是更单纯的 OR 运算。
我们知道,OR 运算的运算子有两种情况,计算结果为true。
(1)一个为 true,另一个为 false;
(2)两个都为 true。
上面两种情况,有时候需要明确区分,所以引入了 XOR。
XOR 排除了第二种情况,只有第一种情况(一个运算子为true,另一个为false)才会返回 true,所以可以看成是更单纯的 OR 运算。也就是说,XOR 主要用来判断两个值是否不同。
XOR 一般使用插入符号(caret)^表示。如果约定0为false,1为true,那么 XOR 的运算真值表如下。
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
二、运算定律
XOR 运算有以下的运算定律。由于非常简单,这里就省略证明了。
(1)一个值与自身的运算,总是为 false。
x ^ x = 0
(2)一个值与 0 的运算,总是等于其本身。
x ^ 0 = x
(3)可交换性
x ^ y = y ^ x
(4)结合性
x ^ (y ^ z) = (x ^ y) ^ z
三、应用
根据上面的这些运算定律,可以得到异或运算的很多重要应用。
3.1 简化计算
多个值的异或运算,可以根据运算定律进行简化。
a ^ b ^ c ^ a ^ b = a ^ a ^ b ^ b ^ c = 0 ^ 0 ^ c = c
3.2 交换值
两个变量连续进行三次异或运算,可以互相交换值。
假设两个变量是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