浅谈异或运算^的作用

很多算法题中使用位运算能够巧妙的解决很多问题,比如:

找出只出现一次的数

如果数组中只有一个数字出现一次,其他数字都出现两次。试找出这个数据

通常的情况,我们会采用遍历的思路。但是其实不用。因为异或运算有个十分重要的性质:任何一个数字异或它自己都等于0,而0异或任何数都等于那个数。

因此,但凡出现两次的数字,异或之后,相互抵消。遍历整个数组,最终留下的就是那个只出现一次的数字。怎么样,是不是很巧妙?此外,异或运算还可用于两数交换。比如

两数交换

通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a=3,b=4的值,可通过下列语句实现:

a=a∧b;
b=b∧a;
a=a∧b;

这样不通过任何中间变量,就实现了按照位运算实现了两数交换,过程如下图

 另一个应用参考我的剑指offer专栏第40题——寻找只出现一次的数

原文地址:https://www.cnblogs.com/shaonianpi/p/12493782.html