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