1. 程式人生 > >C語言異或運算在程式設計中的妙用

C語言異或運算在程式設計中的妙用

異或運算子^也稱XOR運算子。它的規則是若參加運算的兩個二進位同號,則結果為0(假);異號則為1(真)。即0 ^ 0=0,0 ^ 1=1,1 ^ 1=0。

性質:

(1) 一個數與1異或會翻轉

(2) 一個數與0異或保持不變

(3) 一個數異或它本身等於0

(4) 每一位的結果只與該位有關。

應用:

(1) 使特定位翻轉

    假設有01110101,現在想讓第一位,第三位翻轉(最低位為第一位),只要異或00000101,得到01110000.

(2) 交換兩個值,不用臨時變數

 假如a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現:

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

即等效於以下兩步:

  ① 執行前兩個賦值語句:“a=a ^ b;”和“b=b ^ a;”相當於b=b ^ (a ^ b)。而b ^ a ^ b等於a ^ b ^ b。b ^ b的結果為0,因為同一個數與本身相^,結果必為0。因此b的值等於a ^ 0,即a,其值為3。

  ② 再執行第三個賦值語句:a=a ^ b。由於a的值等於(a ^ b),b的值等於(b ^ a ^ b),因此,相當於a=a ^ b ^ b ^ a ^ b,即a的值等於a ^ a ^ b ^ b ^ b,等於b。a得到b原來的值。

性質:

(1) 一個數與1異或會翻轉

(2) 一個數與0異或保持不變

(3) 一個數異或它本身等於0

(4) 每一位的結果只與該位有關。

應用:

(1) 使特定位翻轉

    假設有01110101,現在想讓第一位,第三位翻轉(最低位為第一位),只要異或00000101,得到01110000.

(2) 交換兩個值,不用臨時變數

 假如a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現:

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

即等效於以下兩步:

  ① 執行前兩個賦值語句:“a=a ^ b;”和“b=b ^ a;”相當於b=b ^ (a ^ b)。而b ^ a ^ b等於a ^ b ^ b。b ^ b的結果為0,因為同一個數與本身相^,結果必為0。因此b的值等於a ^ 0,即a,其值為3。

  ② 再執行第三個賦值語句:a=a ^ b。由於a的值等於(a ^ b),b的值等於(b ^ a ^ b),因此,相當於a=a ^ b ^ b ^ a ^ b,即a的值等於a ^ a ^ b ^ b ^ b,等於b。a得到b原來的值。