不创建临时变量,实现两个数的交换

首先注意,原先说的

a^a=0;    即:相同数之间按位异或得0

a^0=1;    即:不同数之间按位异或得1

是将两个数换算成二进制之后通过0和1来进行比较,若相同则得0,不同则得1

方法有二

1.第一种:

但是他也有缺点,如果a和b的值都特别大的话,如果相加,容易造成数据溢出

2.第二种

这种方法就不容易在成数据溢出

分析一下上面的代码:

因为a=70,二进制后8位是01000110

b=20,二进制后8位是00010100

首先是a=a^b;  因为相同数按位异或得0,不同数按位异或得1,所以最终a=01010010,换算成十进制是82,所以a=82

其次是b=a^b;   82的二进制是01010010,它与20的二进制00010100比较之后是01000110,换算成十进制是70,所以现在b=70

最后a=a^b;   是82的二进制01010010和70的二进制01000110进行比较,最后得00010100,换算成十进制就是20

最终   a=20,b=70

写作不易,若有疑问,请多指教,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值