不使用其他變數,交換兩個變數的值。
/** 方法壹。
** 因為異或運算滿足交換律和結合律,且 a^a = 0, 0^a = a,
* 所以用下面過程可以交換 a, b: (用 a, b 表示原始的 a, b 值)
* 1) a = a^b
* 2) b = a^b // b = a^b = (a^b)^b = a^(b^b) = a^0 = a
* 3) a = a^b // a = a^b = (a^b)^a = (b^a)^a = b^(a^a) = b^0 = b
*/void swap_in_space(int & a, int & b)
/* 方法貳。 */
void swap_in_space(int & a, int & b)
注:1. 方法壹比方法貳高效。
2. 方法貳中的加法操作有溢位的可能,但在此題中溢位不影響結果的正確性。
3. 方法貳中的加減可以分別替換成乘除,但效率更低,而且此時溢位會影響結果的正確性。
參考:1.
2.
不使用中間變數交換兩個變數的值詳解
交換兩個int型別數字的值,最簡單的方式就是使用乙個臨時變數 public static void swap1 int a,int i,int j 如果不使用臨時變數,我們也可以交換 public static void swap2 int a,int i,int j 注意異或運算子有這樣乙個規律 ...
不使用臨時變數交換兩個整數變數
先看一下交換變數的常規方式 public static void swap1 輸出 i 1,j 5 i 5,j 1使用臨時變數儲存一下其中乙個值,這種方法所有人都知道,且可以交換任何變數。如果是int或者long等整數變數,還可以通過以下方式交換 public static void swap2 輸...
不使用中間變數實現兩個變數的交換
在實現程式功能時,我們經常要進行變數數值的交換,最近學習到在c語言中不用定義新變數來實現兩個變數數值的交換的方法,跟大家分享一下!下面是演算法的實現 include int main 程式可能有點難理解。在順序結構程式中,程式一條一條的依次執行。為了避免值和變數名的混淆,假定使用者輸入的是a0和b0...