异或运算及其用法

本文介绍了异或运算的基本性质,包括交换律、结合律和对于偶数次出现数的消去特性。异或运算是无进位加法,可用于实现两个数的无额外变量交换。在解决数组中出现奇数次的数的问题时,异或操作能有效地找出这样的数。此外,通过特定步骤,也可找出两个出现奇数次的数。文中还解析了代码第24行如何利用异或运算获取最右侧不同的位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异或运算符∧, 相同为0,不同为1

性质:

①0∧N=N, N∧N=0

②满足交换律,结合律

即a∧b=b∧a,(a∧b)∧c=a∧(b∧c)

③同一批数做异或运算,运算结果与运算顺序无关

异或运算可理解为无进位加法,例如10110∧00111=10001


应用:

一、异或运算实现两个数交换:

a=a∧b;

b=a∧b;

a=a∧b;

解释:刚开始时a=甲,b=乙;

第一行运行后:a=甲∧乙,b=乙;

第二行运行后:a=甲∧乙,b=甲∧(乙∧乙)=甲∧0=甲;

第三行运行后:a=甲∧乙∧甲=(甲∧甲)∧乙=0∧乙=乙

实现交换。但需注意:只能对两个不同的数使用

二、题目:①在一整型数组中,只有一个数出现了奇数次,其余数均出现偶数次,找出出现了奇数次的数;②已知两组数出现了奇数次,其他所有数都出现了偶数次找到这两种数。

解:①定义一个变量eor=0,依次将eor与数组中每个数做异或运算,最终结果即为要找的出现奇数次的数(出现偶数次的数之间异或都等于0,而出现奇数次的会留下一个,任何数与0异或都等于本身,因此剩下出现奇数次的数)

②假设要找的两个出现奇数次的数为a,b。采用相同的思路,让变量eor=0与数组中所有数依次做异或运算,得到的结果eor=a^b,并且知道eor=a^b≠0,所以eor某一位上必定为1,即a与b在这一位上不同。那么,我们假设eor为1的这一位为第x位(x是已知的),再定义变量eor'=0,并将其与数组中所有第x位不是1的数,最终eor'得到a或b。最后eor^eor'得到另一个数。

 代码第24行解释:

假设eor=100010,取反~eor=011101,再+1得011110,eor&(~eor+1)=000010即得到eor中最右侧的1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的蒟蒻99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值