異或交換兩個數

2021-08-28 16:46:06 字數 408 閱讀 3507

void swap(int &a, int &b)
一般我們可以用異或來進行交換兩個數,以前我也不知道會有這個問題,最近在準備考研寫排序的時候,發現自己寫的swap函式在選擇排序的時候會出現個別0。通過查閱大佬們的部落格,發現問題是由於swap在對同乙個物件進行異或的時候,因為同乙個物件的位址是相同的,所以在進行swap的時候會異或3次,自己搞自己3次就會變成0,所以在異或前進行判斷,如果傳入物件相同的話,就不要異或了,就能避免這個問題。

本人萌新乙隻,如果有什麼錯誤的地方,希望各位大佬能批評指正。我的描述可能不太清楚,以下是我所查閱的部落格,希望能對你有所幫助~

[1] 關於通過異或交換兩個元素的值的乙個陷阱

[2] 筆記一 2.1.8異或交換產生的問題

[3] 演算法《異或操作交換兩個數的坑》

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...