1.基本特性:
参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
例如:10100001^00010001=10110000?
2.异或作用:
按位异或可以用来使某些特定的位翻转
如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。
10100001^00000110=10100111
1010 0001 ^ 0x06 = 1010 0001 ^ 6通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。
例如交换两个整数a,b的值,可通过下列语句实现:a=10100001,b=00000110
a=a^b; //a=10100111
b=b^a; //b=10100001
a=a^b; //a=00000110
3.LeetCode题目:
Sigle Number
Given an array of integers, every element appears?twice?except for one. Find that single one.
给一个数组,除了一个单独元素,每个元素出现两次,找出这个单独数字
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
使用线性复杂度,不浪费多的内存
4.参考代码:
class="java" name="code">public class SingleNumber { public int singleNumber(int[] a){ int sNum = 0; for(int i=0;i<a.length;i++) sNum ^=a[i];//异或自己为0,0异或任何数等于任何数 return sNum; } }
?
??
?