异或相关知识 xor (草稿)

异或是一种逻辑运算,规则为不同为1,相同为0。0异或任何数仍为原数,1异或任何数为其反数。异或在编程中用于无进位加法,且满足交换律和结合律。在解决特定问题如交换两数、找数组中只出现一次的数字等场景下有独特作用。
摘要由CSDN通过智能技术生成

1 异或的定义

  • 异或(xor)是一个数学运算符。
  • 它应用于逻辑运算
  • 异或的数学符号为“⊕”,计算机符号为“xor”,也可以写成 ^ (注意区别于乘方符号^)
  • 其运算法则为:
  • 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
  • 异或是基于二进制的
  • 异或是基于二进制的,逐位的比较!
  • 异或可以理解为不进位的二进制加法

2 为什么 0异或任何数=自身, 而1异或任何数=非自身

0异或任何数=自身, 1异或任何数=非自身

下面是我的推导过程,网上的往往说的不太清楚

A只可能是0 或者1

A ^ 1 的推导

如果A=0, 那么A^1=1, 所以A^1的结果和A相反

如果A=1,那么A^1=0, 所以A^1的结果和A相反

所以无论A=0/1, A^1都是非A

所以A ^1=非A

A ^0的推导

如果

如果A=0, 那么 A^0=0 , 所以A^0的结果和A相同

如果A=1, 那么 A^0=1 , 所以A^0的结果和A相同

所以A ^0=A

3  为什么有了不等于,还要异或?这两者相同吗?

  • 异或  不同于 不等于
  • 区别在于异或是接位进行的,不等是按整体进行的
  • 异或属于位运算,把一个数以二进制的形式对每一位进行异或运算

4  xor 不同于 or

  • or(t,t)   =1 
  • xor(t,t) =0

参考资料,需要整理,先这样

异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

异或略称为XOR、EX-OR

程序中有两种演算子:XOR、⊕。

使用方法如下

z = x ⊕ y

z = x xor y

英文术语 exclusive or 怎么理解呢?“异或”最早是因为什么发明的?

对于a⊕b⊕a=b,我觉得“0异或任何数不变,1异或任何数取反”比较好理解。有没有别的理解方式,感觉好神奇。能独立发现a⊕b⊕a=b交换 a、b 值的人,能不能告诉我你们是怎么思考的。。

表示为:

0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
特点:

0异或任何数,是任何数;
1异或任何数,任何数取反;
任何一个数字异或自己都等于0
面试题:一个整型数组中除了两个数字之外,其他的数字都出现了两次。试找出这两个只出现一次的数字。《剑指offer》

 

异或的意思是 按位比较,位相同(0,0或1,1)时,结果为0,位不同时(0,1或1,0)结果为1
所以,0异或任何数A 结果还是A
A异或1时,A的最后一位是1,则会变为0,如果是0,则会变为1,因此,结果一定是非A

 

异或本质就是无进位相加,比如下表

第一个数1100
第二个数0101
结果1001
  • 第一个数为1,第二数为0时,结果为1+0=1;
  • 第一个数为1,第二数为1时,结果为1+1=2,逢2不进1直接为0;
  • 第一个数为0,第二数为0时,结果为0+0=0;
  • 第一个数为0,第二数为1时,结果为0+1=1;

结论:多个数的异或就看1的个数是奇数还是偶数,如果为奇数则最终结果为1,如果为偶数则最终结果为0

异或性质:满足交换律和结合律 即:a^b=b^a (a^b)^c=a^(b^c)

异或应用

案例1:不使用中间变量来交换两个数的位置

int a=100,b=200;
a=a^b;
b=a^b;
a=a^b;

这段代码怎么理解呢? 把a看作甲,把b看作乙

  • 第一行的a=a^b;该行代码执行完之后,a变成甲^乙 , b还是乙。
  • 第二行代码b=a^b;该行代码执行完之后,b=甲^乙^乙,因为乙^乙的结果为0,所以b=甲=a。
  • 第三行代码a=a^b;该行代码执行完之后,a=甲^乙^甲,因为甲^甲的结果为0,所以a=乙=b。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值