以前偶爾從同學那裏知道原來交換兩個數的值並不一定需要臨時變量,直接用這個兩個數就可以直接交換,但當時沒有仔細記住,突然想起來就去搜了一下,發現不止一種方法,現總結如下:
方法一:利用C語言提供的異或運算
a = a ^ b;
b = b ^ a;
a = a ^ b;
原理:第一步執行了a = a ^ b;則第二步b = b ^ a就相當於b = b ^ (a ^ b) = a ^ b ^ b = a ^ 0 = a;第三步a = a ^ b就相當於a = (a ^ b) ^ (b ^ (a ^ b)) = b。
也可以將三條語句縮寫爲一條a ^= b ^= a ^=b;
方法二:只利用加減法來實現
a = a + b;
b = a - b;
a = a - b;
方法三:利用算術運算符的結合順序(自左至右)
p = p + q - (q = p);
(此方法經驗證是錯誤的,因爲在計算的過程中先將q賦值爲p,然後算出的結果就爲p = p + p - p = p,所以此行代碼只是將q賦值爲了p,p的值並沒有改變)
原來在編程的過程中除了那些常規的做法外可以有很多小技巧的,暫時不知道到底有什麼用,就是覺得很神奇,蒐集了一下,嘿嘿