我們知道異或是相同取0相反取1,如:
0101異或1101的結果是1000。如對兩個數,經過三次進行異或運行後的結果是這兩個數的值互換。如 a = 0101, b=1101,則進行的操作如下:
第一次異或運算: a = a ^b = 1000
第二次異或運算: b = a^b = 0101
第三次異或運算: a = a^b = 1101
至此,a和b這兩個數的值已經互換了,並且沒有使用到額外的儲存空間。
那麼,能不能直接寫一個函數直接將a和b作爲值參數進行數值互換呢。答案是否定的。我們知道函數參數的以值傳遞方式是對參數的值拷貝到當前函數棧幀中,相當於對傳遞過來的參數作一個內存拷貝吧。這樣,傳遞過來的參數值改變並沒有影響到原來與參數的變量或常量的值。如果是傳遞過來的是引用,結果就不一樣了。
使用java語言簡單實現如下:
public static void quickSwap(int vaules[]){
values[0] = values[0]^values[1];
values[1] = values[0]^values[1];
values[0] = values[0]^values[1];
}