异或,英文为exclusive OR,缩写成xor
异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
z = x ⊕ y
z = x xor y
以上两个式子是等价的
– 引用自百度百科
如何理解异或两种方法理解异或
二进制计算// 注意java中只有传值引用,要写一个函数来交换,需要额外加入一个数组来存储结果
public static void main(String[] args){
int a = 1, b = 2;
int tmp = a;
a = b;
b = tmp;
System.out.println("a:" + a + " b:" + b);
}
可以看到我们需要一个额外的空间来完成交换,那可不可以不用额外空间交换变量的值呢?异或是一个有效的解决方案。a = a ^ b
b = a ^ b
a = a ^ b
//转换成
a = 001 ^ 010 = 011 -> 3
b = 011 ^ 010 = 001 -> 1
a = 011 ^ 001 = 010 -> 2
// 是不是得到了 a = 2 , b = 1
在c/c++中我们可以用来交换指针:*p = *p ^ *s ;
*s = *p ^ *s ;
*p = *p ^ *s ;
是不是很神奇?不过,可能这样的理解还是不够直观,我们可以借助集合来理解
韦恩图
假设我们有两个集合A,B,它们有一块公共的交集。那么在A∨B的情况下,是下面这张图: