异或
定义
- 异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。 简单理解就是不进位加法,如1+1=0,0+1=1,0+0=0,1+0=1。
- 异或运算满足交换律,比如a^b^a = a^a^b = b。
- 满足结合律:(a^b)^c == a^(b^c)
- 对于任何数x,都有x^x=0,x^0=x
常见例子
一个整型的数组,除了一个数只出现一次,其余都是出现两次,得出这个数:
class Solution {
public:
int singleNumber(int A[], int n) {
//set<int> tmp;
//for (int i = 0; i < n; i++) {
// if (tmp.find(A[i]) != tmp.end()) {
// tmp.erase(A[i]);
// } else {
// tmp.insert(A[i]);
// }
//}
//return *tmp.begin();
// 异或方式解决
int tmp = A[0];
for (int i = 1; i < n; i++) {
tmp = tmp^A[i];
}
return tmp;
}
};
持续更新中。。。