1:加法
int a=10,b=13;
a=a+b;
b=a-b;
a=a-b;
#include <stdio.h>
int main()
{
int a =10, b =13;
printf("a = %d b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a = %d b = %d\n",a,b);
return 0;
}
2:減法
a = a - b;
b = a + b;
a = b - a;
3:乘法
a = a*b;
b = a/b;
a = a/b;
缺點:當a,b的值較大時,會產生溢出,使結果錯誤。同時b不能等於0;
4:異或
a = a^b;
b = a^b;
a = a^b;
5:同或
- 前面幾種方法很相似,既然異或能完成兩個變量的值的交換,那同或能不能呢?觀察方法1到4,它們都滿足這樣的式子,a=a△b△b, △爲 爲某種運算符,例如1中,△分別對應+和-。4中△對應⊕(⊕爲數電中異或符號),即a=a⊕b⊕b。同或同樣滿足上面的式子,a=a⊙b⊙b(⊙爲同或)。
- a=a⊙b
- b=a⊙b
- a=a⊙b
- 又因爲C語言中並沒有同或運算,因此,把同或表達式轉化成 含有按位與、按位或、取反運算的表達式。
- a
= (a&b)|(~a&~b);
b = (a&b)|(~a&~b);
a = (a&b)|(~a&~b); - 除法從數學角度來說雖然也滿足上面的式子,但C中 “/“ 運算符的結果爲整數,會產生錯誤,所以除非兩個整數成倍數關係,纔有可能得到正確結果。
右邊的表達式還可以轉換成只含或和取反兩種運算的式子,或轉換成只含與和取反兩種運算的式子。因爲數電中 ab=(a'+b')'
a+b=(a'b')'
總之,這五種方法本質上就是一種方法。