异或^的几个用处

转自:http://blog.csdn.net/sinat_33107885/article/details/52020840
一、交换两个整数的值而不必用第三个参数

a = 9;
b = 11;

a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b; 0010^1001=1011

a = 11;
b = 9;

二、奇偶判断

^a操作就是将a中的每一位按位逐一进行异或,例如a=4’b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。

三、配对性
设a为任意非负偶数,b=a+1为比a大1的正奇数,则必有a^1=b.b^1=a;

可用于处理两两配对问题。

四、运算具有不进位加法性

如1+1=0,0+0=0,1+0=1;

五、交换律,结合律,对任何数x,有x^x=0,x^0=x;

六、自反性

A^B^B=A^0=A

这是一个最重要的性质,对于给定的A,运用同样的运算因子B,两次运算后仍得到A本身,可用于数据加密传输等。

leetcode上第268. Missing Number,就是此题应用。

X=1^2^…^lost^…^n(包含丢失的那个数,设为lost)

Y=1^2^…^n(不包含lost)

则X=Y^lost,则X^Y=Y^Y^lost=0^lost=lost,大功告成。

先把理解的写上,不理解的还需加功
先加上链接:http://www.cnblogs.com/danh/archive/2010/12/24/1915810.html

原文地址:https://www.cnblogs.com/zxy160/p/7215122.html