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

目录

•写在前面

•利用新变量

•利用加减法

•利用乘除法

•利用异或

•利用移位


•写在前面

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

•利用新变量

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

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;

 

  • 9
    点赞
  • 9
    收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoCong-Deng

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值