不使用中间变量交换2个变量的值

首先最简单的是加减乘除,但是这些运算会出现精度问题。。如果使用整数测试,肯定没问题,但是极端情况就会出现精度问题。
具体想看的鸟哥博客传送门:https://www.laruence.com/2013/03/26/2884.html

不出现上面的问题就使用位运算 ^ 

$a = 9;
$b = 5;

$b = $a^$b;
$a = $b^$a;
$b = $b^$a;
echo sprintf('a=%d,b=%d',$a,$b);

首先搞清楚
^ 是代表什么意思,就是按对应的二进位相异或,当两对应的二进位相异时,结果为1,相同是结果为0;
那么我们把 数字  9和5的二进制列出来
9的二进制 00001001
5的二进制 00000101

进行位异或运算得到:
00001100
这个结果是12;在本次交换过程不需要计算出结果;

然后再那这个结果进行位异或运算 $a
00001100
00001001
得到:00000101 就是5了,那么锁定 $a = 5;
再拿这个结果与$b进行异或运算
00001100
00001001
得到:00000101 ,那么锁定 $b = 9;
交换完毕;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值