交換兩個值,不用臨時變量(C位運算)

一般咱們交換兩個值,都是用一個臨時的變量temp,拿交換a,b的值爲例,一般的作法是:spa

temp = a;變量

a = b;二進制

b = temp;co

不過利用位運算,真的是方便不少:
 假如 a = 3,b = 4。想將a和b的值互換,能夠用一下賦值語句實現:

        a = a ^ b;
        b = b ^ a;
        a = a ^ b;background

    下面用豎式進行簡單說明:(10進制化爲二進制)
    
        a = 011
(^)    b = 100
則    a = 111(a ^ b的結果賦值給a,a已變成了7)
(^)    b = 100
則    b = 011(b^a的結果賦給b,b已經變成了3)
(^)    a = 111
則    a = 100(a^b的結果賦給a,a已經變成了4)    

        從上面的豎式能夠清楚的看到利用異或運算實現兩個值交換的基本過程。
       
        下面從深層次剖析一下:

        1.對於開始的兩個賦值語句,a = a ^ b,b = b ^ a,至關於b = b ^ (a ^ b) = a  ^ b ^ b,而b ^ b 顯然等於0。所以b = a ^ 0,顯然結果爲a。因爲一個數和本身異或的結果爲0而且任何數與0異或都會不變的,因此此時b被賦上了a的值
        2. 同理能夠分析第三個賦值語句,a = a ^ b = (a ^ b) ^ a = b

        注:1.^ 即」異或「運算符。它的意思是判斷兩個相應的位值是否爲」異「,爲」異"(值不一樣)就取真(1);不然爲假(0)。
                2.^運算符的特色是與0異或,保持原值;與自己異或,結果爲0。
位運算

相關文章
相關標籤/搜索