详解交换两个数的五种思路

目录

•写在前面

•利用新变量

•利用加减法

•利用乘除法

•利用异或

•利用移位


•写在前面

交换两个数?听起来这不是很简单嘛,感觉没什么好讲的。不过这么想是因为很多时候都想简单了,没有把编程的巧妙使用到极致,那么接下来我们来看看,交换两个数这么简单的问题,怎么玩出不一样的花出来,哈哈哈。

•利用新变量

这种方法是非常非常基本的一种方式,直接利用一个新的变量作为中介,交换两个数。

temp = a;
a = b;
b = temp;

•利用加减法

使用加减法来进行交换,这种方法实际上就是先把a+b的结果暂时先保存在变量a中,然后通过这改变后的a和原始的b进行减法就可以得到交换后的b,不过要注意了,使用这种方法有一个不好的地方,就是a和b都是int类型,a+b的结果可以越界。

a = a + b;
b = a - b;
a = a - b;

•利用乘除法

这个方法其实和加减法是一个道理,都是先将两个数的结合,储存在其中一个数中,然后通过分离得到两个数。乘除法就是,先将两个数相乘储存在a中,然后除出来,也很巧妙。一样的,这个方法比加减法更容易越界。

a = a * b;
b = a / b;
a = a / b;

•利用异或

使用异或的这个方法可以说非常适合计算机计算,计算速度也是非常快的,一般swap函数的底层实现会使用这种方式进行。毕竟计算机是二进制的世界,学会利用二进制,简直帅的不行。而且这种方式避免了越界问题,哈哈哈。

a = a ^ b;
b = a ^ b;
a = a ^ b;

•利用移位

移位的方法也是使用二进制来完成,不过这种方法收到了位数的限制,比如在32位的机子中计算,int拆成高16位和低16位进行计算,相当于多了16位的暂存空间可以周转,但是此方法的缺陷也显而易见,就是如果被赋值的a或者b超过了16位,这种方法就会发生错误。

a <<= 16;
a |= b;
b = a >> 16;
a = a & 0xffff;
发布了91 篇原创文章 · 获赞 463 · 访问量 91万+

猜你喜欢

转载自blog.csdn.net/DBC_121/article/details/104158845
今日推荐