今天发现一个不用第三个变量就可以交换两个变量的值的方法

今天发现一个不用第三个变量就可以交换两个变量的值的方法

平常交换两个变量的值都是建一个新变量存放然后交换。
int a = 5;
int b = 6;
int temp;
temp = a;
a = b;
b = temp;

可能是有点知识没牢固,今天看位运算的时候,发现可以通过位运算实现不需要第三个变量就交换的方法。
int a = 5;
int b = 6;
a = a ^ b;
b = a ^ b;
a = a ^ b;
这样就交换成功了。它是通过三次异或实现不用临时变量就交换两个变量的方法。
异或的操作:
a: 1 1 0 0
b: 1 0 1 0
异或运算
0 1 1 0
当它是相同的时候,异或为0,不同的时候异或为1(同为0,异为1),还有发现0具有保持的特性,1具有反转的特性,任意一个(0,1)与0异或都是它本身,而任意一个(0,1)与1异或都是它相反的一个数
那如上:
a ^ a
1 1 0 0
1 1 0 0
异或:
0 0 0 0
则:
a ^ a ^ b
0 0 0 0
1 0 1 0
因为我们发现0有保持的特性,即任意一个(0,1)与0异或都是它本身
1 0 1 0
所以发现其实a ^ a ^ b = b
这样发现
a = a ^ b;
b = a ^ b;
这个地方a = a ^ b,也等于b = a ^ b ^ b,这个时候b = a;
而接下来
a = a ^ b;
这个时候,b=a,就等于a = a ^ b ^ a;所以a = b;交换完成。
iosers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值