原文地址: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
-------------------------------------------------------------------------------------------