1. 程式人生 > >xor 邏輯異或

xor 邏輯異或

定義

Exclusive OR(異-或運算) 異或(xor)是一個數學運算子。它應用於邏輯運算。異或符號為“^”。其運演算法則為: a^b=(a' and b) or (a and b')(a'為非a)。 真異或假的結果是真,假異或真的結果也是真,真異或真的結果是假,假異或假的結果是假。就是說兩個值不相同,則異或結果為真。反之,為假。 不同為1,相同為0. 異或也叫半加運算,其運演算法則相當於不帶進位的二進位制加法:二進位制下用1表示真,0表示假,則異或的運演算法則為:0異或0=0,1異或0=1,0異或1=1,1異或1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位。 異或略稱為XOR、EOR、EX-OR 程式中有三種演運算元:XOR、xor、 ^。 使用方法如下 z = x ^ y; z = x xor y;

編輯本段
異或運演算法則

1. a ^ a = 0 2. a ^ b = b ^ a 3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c; 4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c. 5. a ^ b ^ a = b. 6.若x是二進位制數0101,y是二進位制數1011 則x^y=1110 只有在兩個比較的位不同時其結果是1,否則結果為0 即“相同為0,不同為1”!
輸入 運算子 輸入 結果
1 ^ 0 1
1 ^ 1 0
0 ^ 0 0
0 ^ 1 1

編輯本段異或邏輯

異或邏輯的真值表如圖1
所示,其邏輯符號如圖2所示。異或邏輯的關係是:當AB不同時,輸出P=1;當AB相同時,輸出P=0。“⊕”是異或運算子號,異或邏輯也是與或非邏輯的組合,其邏輯表示式為: P=A⊕B
   圖1可知,異或運算的規則是 0⊕0=0,0⊕1=1 1⊕0=1,1⊕1=0 口訣:相同取0,相異取1 事實上,XOR 在英文裡面的定義為either one (is one), but not both, 也即只有一個為真(1)時,取真(1)。

編輯本段作用

在計算機中普遍運用,異或(xor)的邏輯符號^ (Shift + 6)或一個圓圈裡面增加一個+(⊕)或者·.形象表示為: 真^假=真 假^真=真 假^假=假 真^真=假 或者為: True ^ False = True False ^ True = True False ^ False = False True ^ True = False 部分計算機語言用1表示真,用0表示假,所以兩個位元組按位異或如下 00000000 異或 00000000 = 00000000 ============我是
分界線
1============ 下面是兩個二進位制數值進行異或計算: 11111111 異或 00000000 = 11111111 ============我是分界線2============ 現實中用的都是十進位制的數值,那麼我們來看一看兩個十進位制數值是怎麼進行異或計算: 5 異或 2 = ? 1.進行異或計算前會把數值都轉換為二進位制的: 5和2轉為二進位制分別為:0101 、0010 0101 異或 0010 = 0111 2.再把結果 0111 轉換為十進位制的:7 3.所以 5 異或 2 = 7 ,而不是大家想像的5和2不同,則為1(真).

編輯本段異或的巧妙應用

C語言中若需要交換兩個變數的值,除了通常使用的借用中間變數進行交換外,還可以利用異或,僅使用兩個變數進行交換,如: a=a^b;//賦值 b=b^a;//賦值 //b^a=b^(a^b)=b^a^b=a;//等號等於的意思 a=a^b;//賦值 //a^b=a^b^a=b;等號是等於的意思 這樣就完成了a與b的交換。