不使用中间变量交换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;
交换完毕;


 

你可能感兴趣的:(算法,算法)