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原來的值。