异或的常用性质
异或的定义
异或是一个数学运算符,它应用于逻辑运算与计算机中的位运算。
令 \(p\) 和 \(q\) 为命题。\(p\) 和 \(q\) 的异或是这样一个命题:当 \(p\) 和 \(q\) 中恰好只有一个为真时命题为真,否则为假。\(p\) 异或 \(q\) 通常记作 \(p \ \text{xor}\ q\) 或 \(p \oplus q\)。在编程语言中通常为 p^q。
如 \(p\)、\(q\) 两个值不相同,则异或结果为 \(1\)。如果 \(p\)、\(q\) 两个值相同,异或结果为 \(0\),即异或的运算法则为:\(0 \oplus 0 = 0\),\(1 \oplus 0 = 1\),\(0 \oplus 1 = 1\),\(1 \oplus 1 = 0\)(同为 \(0\),异为 \(1\))。这种运算捕捉了输入位的“排他性”,即输入不能同时为真。
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用 \(1\) 表示真,\(0\) 表示假,这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。
异或的性质
异或的一般性质
交换律
两个命题(或二进制数)进行异或运算时,交换它们的位置,结果不变:\(p \oplus q = q \oplus p\)。
结合律
三个或多个值进行连续异或运算时,运算顺序不影响最终结果:\(p \oplus (q \oplus r) = (p \oplus q) \oplus r\)。
恒等律
任意值与 \(0\) 进行异或运算,结果等于它本身:\(p \oplus 0 = p\)。
归零律
任意值与自身进行异或运算,结果一定为 \(0\):\(p \oplus p = 0\)。
对合运算
对同一个值连续两次异或(先与 $ q $ 异或,再与同一个 $ q $ 异或),相当于没有变化: \(p \oplus q \oplus q = p \oplus 0 = p\)。
逆元
对于任何 bool 值 \(a\), 有 \(a \oplus 0 = a\) 与 \(a \oplus a = 0\), 即对于异或操作,每一个 bool 值 \(a\) 的逆元就是它本身。
可逆性
若 \(A \oplus B = C\),则 \(A \oplus C = B\) 且 \(B \oplus C = A\)。
拓展性质
与、或、异之间的关系
与或的包含关系
和与异或的差值固定
和与异或的差是“进位值”的两倍:\((A + B) - (A \oplus B) = 2 \cdot (A \& B)\)。
奇偶性与最低位独立
其中 \(\text{lsb}(x)\) 表示最低位(\(0\) 或 \(1\))。
奇偶个数定理
- \(偶数 \oplus 偶数 = 偶数 \implies (2x) \oplus (2y) = 2(x\oplus y)\)。
- \(奇数 \oplus 奇数 = 偶数 \implies (2x +1) \oplus (2y+1) = 2(x\oplus y)\)。
- \(偶数 \oplus 奇数 = 奇数 \implies (2x) \oplus (2y + 1) = 2(x\oplus y) + 1\)。
推论:多个数异或 ⟹ 结果为奇数当且仅当其中奇数个数为奇数。
数值界限
上限
对于两个整数 \(a, b\),\(a \oplus b \le a + b\),当 \(a \& b = 0\) 时等号成立。
下限
对于两个整数 \(a, b\),\(a \oplus b \ge |a - b|\)。
其它性质与运用
找出现奇数次的数
给出一个数组,只有一个数出现奇数次,其余偶数次,求这个出现奇数次的数
全部异或一遍,即得该数,即:

浙公网安备 33010602011771号