異或運算的一些知識

原文地址:http://blog.csdn.net/zzxyyx_1/article/details/19009705

用異或交換兩個數就不說了,一般沒人那麼用,畢竟異或符號優先級低,容易產生錯誤。


簡單的定理

若a=b^c

那麼b=a^c , c=a^b

-------------------------------------------------------------------------------------------

2*k xor 2*k+1 = 1 

考慮n個連續數字異或

a xor a+1 xor a+2....xor a+n-1

可以取相鄰的兩個數湊成2*k xor 2*k+1

特殊處理一下兩端的值即可。

考慮

a xor a+2 xor a+4... xor a+2*(n-1)

易知最後一位是不變的 其它位按上述方法處理即可。

-------------------------------------------------------------------------------------------

整數集對於異或運算構成一個羣

滿足封閉性、結合律、單位元和逆元。

那麼有些加法的性質可以引申到異或運算中

比如 xorsum[l,r]=xorsum[0,r]^xorsum[0,l-1]

證明就是考慮數字的每一位。

若a[l,r]中某一位的1的個數爲奇數,那麼xorsum[l,r]那一位爲1,

此時若a[0,l-1]那一位1的個數爲奇,那麼a[0,r]那一位1的個數爲偶,xorsum[0,r]^xorsum[0,l-1]在那一位爲1;

此時若a[0,l-1]那一位1的個數爲偶,那麼a[0,r]那一位1的個數爲奇,xorsum[0,r]^xorsum[0,l-1]在那一位爲1;

同理可證a[l,r]中某一位1的個數爲偶數的情況。

-------------------------------------------------------------------------------------------

另外一個就是若a^b^c==0 那麼對於任意0<k<=min(a,b,c)     (a-k)^(b-k)^(c-k)!=0

證明就是考慮k的某一位

首先a、b、c在該位爲1的個數應爲偶數,不然a^b^c!=0

若k在該位是1,那麼a-k b-k c-k 會使得0變1 1變0 那麼此時(a-k)^(b-k)^(c-k)在該位爲1 不爲0

若k在該位爲0,那麼無視,繼續看k-1位,

由此可知若k>0 那麼必有k在某位爲1,此時(a-k)^(b-k)^(c-k)!=0

-------------------------------------------------------------------------------------------


發佈了27 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章