位运算的巧妙用法
异或运算(XOR):
异或运算也称为 按位模二加 运算,当然也就有 按位模三加 运算。
C/C++ 的运算符 : ^
特点:A xor A = 0
根据异或运算的特点,可以解决一类问题。
1. 数组里面只有一个数出现奇数次,其他的都出现偶数次,所有数的异或和即为所求数。
2. 数组里面只有一个数出现1次,其他的都出现3次,所有数的按位模三运算的和即为所求数。
3. 数组里恰好有两个数(a , b)只出现一次外,其余每个数恰好出现两次,所有书去异或和得到 a xor b, 取最高位将数据分组再分别求异或和就是所求的两个数。