不使用中間變數交換兩個數

2021-06-15 04:42:51 字數 819 閱讀 5586

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。

temp = a;

a = b;

b = temp;

通過巧妙的加法與減法運算來實現兩個數的交換。

a = a + b;

b = a - b;

a = a - b;

使用位運算(異或)來交換兩個數。

a = a ^ b;

b = a ^ b;

a = a ^ b;

其正確性是因為異或運算滿足

交換律和

結合律。

證明:b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a;

a = (a ^ b) ^ a = (b ^ a) ^ a = b ^ (a ^ a) = b ^ 0 = b;

這裡有乙個非常容易忽視的陷阱:

當a與b的值相等時,這種方法的結果是將a與b的值都置零。因此要想使用這種方法,要先判斷a與b的值是否相等。

第一種方法需要乙個中間變數temp,但是可以處理所有型別的資料。

第二種和第三種方法不需要中間變數。第二種方法也可以處理簡單資料型別,但是有可能會溢位。第三種方法效率高且不用擔心溢位,但是僅僅適用於整形。

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...

18 不使用中間變數,實現兩個數的交換 JAVA

1 普通的方法,使用乙個中間變數temp,可以使用引用 void swap int a,int b 輸出結果為 4 4 不使用中間變數,使用加減的方法 void swap int a,int b a a b b a b a a b 以上三句等於 a a b a b 5 不使用中間變數,使用乘除的方法...

不使用中間變數交換兩數

交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...