异或^的妙用

最近在做一些算法题的时候,发现了异或很好使,经常有一些很妙的点子是通过它来实现的。所以特别在这里记录一下,方便下次使用与学习。

两数交换

如果不用这三个参数就实现两数的交换的话,可以使用异或^来实现,代码如下:

1
2
3
4
5
6
void swap(int &a,int &b) //通过异或交换两者的值
{
a =a^b;
b= a^b;
a = b^a;
}

找出0, 1, 2, …, n序列中缺了哪个数

这是LeetCode 268 Missing Number的题,代码如下:

1
2
3
4
5
6
7
int missingNumber(int* nums, int numsSize) {
int res = numsSize;
for(int i = 0; i < numsSize; i++){
res ^= i ^ nums[i];
}
return res;
}

暂时只有这两个妙处,下次还有的话,再添加。

分享到 评论