优雅的交换两个数的值

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

解释

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

方法:

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.heiqu.com/zyzszw.html