前言
這是我在一個晚修時無聊時想到的,我稱他為保留數據式交換(沒什么技術含量,看看思路即可)
額,寫得有點亂,將就看看吧
解釋
就是把兩個數通過特定的方法結合起來,然后我們可以通過其中一個值求出另一個值
方法:
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.他不會爆 如果兩個十進制相加(加減乘除都可能出現這種情況)的話可能會爆出范圍,要用高精...