這里主要針對計(jì)算機(jī)編程中的異或運(yùn)算進(jìn)行解釋。
我們先看一下一般的定義:
異或,英文為exclusive OR,或縮寫成xor
異或(xor)是一個(gè)數(shù)學(xué)運(yùn)算符。它應(yīng)用于邏輯運(yùn)算。異或的數(shù)學(xué)符號為“⊕”,計(jì)算機(jī)符號為“xor”。其運(yùn)算法則為:
a⊕b = (?a ∧ b) ∨ (a ∧?b)
如果a、b兩個(gè)值不相同,則異或結(jié)果為1。如果a、b兩個(gè)值相同,異或結(jié)果為0。
異或也叫半加運(yùn)算,其運(yùn)算法則相當(dāng)于不帶進(jìn)位的二進(jìn)制加法:
二進(jìn)制下用1表示真,0表示假,則異或的運(yùn)算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1)。
——部分引自百度百科
使用該運(yùn)算進(jìn)行計(jì)算時(shí)記住相當(dāng)于沒有進(jìn)位的二進(jìn)制加法就可以了。
可是我們在學(xué)習(xí)時(shí)還會用到利用異或運(yùn)算進(jìn)行兩個(gè)值互換,這又該怎么理解呢?我們深入理解一下異或運(yùn)算。
異或的英文是 exclusive or 這應(yīng)該怎么解釋?
or 的含義大概大家都理解,數(shù)學(xué)邏輯中的 A or B, 意味著生活用語中的 A 或 B 或 它們重疊的部分。下面是直觀的維恩圖,圖片均來自維基百科。
exclusive 是“排外的”的含義,"mutually exclusive"是“互斥的”的意思,XOR 是進(jìn)行邏輯或再排除重合的部分,所以不難理解 EOR 也有“互斥或”的名稱。下面是直觀的維恩圖。
我們再看經(jīng)常應(yīng)用到的兩個(gè)值互換的直觀含義。首先,用C語言表達(dá)過程,C
語言中用^表示異或操作:
*p = *p ^ *s ;
*s = *p ^ *s ;
*p = *p ^ *s ;
上面一段代碼向我們演示了如何運(yùn)用異或交換兩個(gè)變量的值而不用額外申請中間變量。
我們用維恩圖的角度看每個(gè)語句。
*p = *p ^*s
若假定左側(cè)的圓是指針p的值,右側(cè)是指針s的值,則指針p的賦值為一次異或操作:
*s = *p ^ *s ;
第二句的指針p的值為上圖,指針s的值仍為右圓,進(jìn)行異或操作后為原指針p的值,賦值給了s:
*p = *p ^ *s ;
在用上圖指針s,原指針p的值與上上圖指針p的值進(jìn)行異或,則得到原指針s的值,賦值給指針p。
這樣就實(shí)現(xiàn)了兩個(gè)值的交換。
歡迎到我的博客感受更好的閱讀體驗(yàn)。