【转】异或

问题:交换两个int变量a,b值的方法?

方案1,需要借助第三个变量:

int tmp=a;

a=b

b=tmp;

方案2,通过加减运算:

a=a+b;

b=a-b;

a=a-b;

这种方案,a+b的结果可能超出int的范围,不推荐!

方案3,通过异或运算:

a=a^b;

b=a^b;

a=a^b;

这种方式是最快的,推荐!

====================================================================================

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示。

如果参与异或运算的两个位相同则结果为0,否则结果为1。

简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。

异或运算特点

1、任何数异或0,等于该数自身。

2、任何数异或1,等于将该数取反。

3、任何数异或自身,等于将该数置0。

异或运算性质

1~交换律。 即a ^ b == b ^ a。

2~结合律。 即a ^ b ^ c = (a ^ b) ^ c == a ^ (b ^ c)。

3~自反性。 即a ^ b ^ b == a。 a ^ b ^ a == b。

====================================================================================

异或的性质及运用

转载于:https://www.cnblogs.com/apeway/p/10786186.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值