异或的使用
异或
相同为0,不同为1。
两个二进制数异或,相当于两个二进制数不进位相加。
异或的性质
0∧N=N,N∧N=0
异或运算满足交换律和结合律
这表明一大堆数字不管顺序如何,异或之后的结果一定是相同的。
使用示例
1.使用异或运算将两个交换
a=a∧b
b=a∧b
a=a∧b
2.一个数组中一种数出现奇数次 其它数出现偶数次,怎么找到这个数。
设置一个变量eor=0,将eor与数组中的每一个数异或,最终会得到出现奇数次的数。
3.提取一个int型的数的最右侧的1
设这个数为n,则最右侧的1为n&(~n+1)。
4.计算一个32位二进制数有几个1
设二进制数为n
while(n!=0){
right=n&(~n+1);
count++;
n∧=rigjt;
}
5.一个数组中两种数出现奇次,其他数出现偶数次,找出这两种数
设eor,与数组中每一个数异或 ,由于两种数出现奇数次,所以eor必然不为0,取出最右侧的1,设为right,数组中的数分为两种,在right位为1,在right位为0,则这两种数必然在right位上不相同,那么设eor2只与right位为1的数异或,由于除了这两种数,其余数都出现偶数次,则会得到两种数其中一种,eor与eor2异或得到另一种。