你知道异或运算吗?

Olathe ·
更新时间:2024-11-15
· 951 次阅读

什么是异或运算?

异或,英文为exclusive OR,缩写成xor
异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
z = x ⊕ y
z = x xor y
以上两个式子是等价的

– 引用自百度百科

如何理解异或

两种方法理解异或

二进制计算
在我们最初学习编程语言的时候,一定遇到过一个问题:
如何交换两个变量的值?假设int a = 1, b = 2,借助一个 int 变量 tmp 暂时存储第一个需要被赋值的变量,就可以实现,代码如下:// 注意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); } 可以看到我们需要一个额外的空间来完成交换,那可不可以不用额外空间交换变量的值呢?异或是一个有效的解决方案。
根据运算法则,相同取0,不同取1。
同样假设: a = 1, b = 2a = 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的情况下,是下面这张图:
在这里插入图片描述 如果按照xor运算,它就会变成(¬A ∧ B) ∨ (A ∧¬B):
在这里插入图片描述 B = Aoxr(AoxrB) = A
在这里插入图片描述 A = Boxr(Aoxr(AoxrB)) = B
在这里插入图片描述
— 图片来自wikipeida
作者:神一般的路过



或运算 异或

需要 登录 后方可回复, 如果你还没有账号请 注册新账号