C語言實現兩個整形變量的值的交換,不使用臨時變量


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△bb,    爲 爲某種運算符,例如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')'

總之,這五種方法本質上就是一種方法。






      

發佈了29 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章