当前位置:主页 > 查看内容

优雅的交换两个数的值 - xihale

发布时间:2021-05-06 00:00| 位朋友查看

简介:前言 这是我在一个晚修时无聊时想到的,我称他为保留数据式交换(没什么技术含量,看看思路即可) 额,写得有点乱,将就看看吧 解释 就是把两个数通过特定的方法结合起来,然后我们可以通过 其中一个值求出另一个值 方法: 1.+ 2.- 3.* 4./ 当然最好的还是 ^ 注意:像……

前言

这是我在一个晚修时无聊时想到的,我称他为保留数据式交换(没什么技术含量,看看思路即可)
额,写得有点乱,将就看看吧

解释

就是把两个数通过特定的方法结合起来,然后我们可以通过其中一个值求出另一个值

方法:

1.+
2.-
3.*
4./
当然最好的还是 ^
注意:像 % & | 这样会舍去数据的无法进行交换

代码

1.+

//a=1,b=2
a+=b;//a=a+b=1+2=3
b=a-b;//b=a-b=3-2=1
a-=b;//a=a-b=3-1=2

2.-

//a=1,b=2
a-=b;//a=a-b=1-2=-1
b+=a;//b=a+b=-1+2=1
a=b-a;//a=b-a=1-(-1)=2

3.*

//a=2,b=3
a*=b;//a=a*b=2*3=6
b=a/b;//b=a/b=6/3=2
a/=b;//a=a/b=6/2=3

4./

//a=2.0,b=3.0  这里要用double或float
a/=b;//a=a/b=2/3
b*=a;//b=a*b=2/3*3.0=2.0
a=b/a;//a=b/a=2.0/(2/3)=3.0

5.^ 压轴戏(永远不丢失数据)
注:用括号里面的为二进制数

//a=1=(01),b=2=(10)
a^=b;//a=a^b=(01)^(10)=11
b=a^b;//b=a^b=(11)^(10)=01
a^=b;//a=a^b=(11)^(01)=10
//此时a=(10)=2,b=(01)=1

这也是我认为的最优的解
原因:1.它在二进制中转换,而其他的都是在十进制的基础完成,理论来说会一点(因为不考虑进位等)
2.他不会爆 如果两个十进制相加(加减乘除都可能出现这种情况)的话可能会爆出范围,要用高精...

-原文链接:https://www.cnblogs.com/xihale/p/cpp_swap.html
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:20182217刘洪宇EXP3_免杀原理 - 菠菜雨 下一篇:没有了

推荐图文


随机推荐