什么是异或运算?
异或(xor)是一个数学运算符,它应用于逻辑运算,异或的符号为"^";它是一种基于二进制的位运算,将十进制的数转换成二进制,然后每个位置进行比较,相同为0,不同为1。这里容易跟同或运算记混,根据异或运算的特性我们可以把他记成:“无进位相加”。
案例:
1 0 1 0 0 1 0 0 1
1 1 0 0 1 0 1 0 1
————————
0 1 1 0 1 1 1 0 0
异或运算有哪些特征?
1.满足交换律和结合律,例如:a^b=b^a(交换律),(a^b)^c=a^(b^c) 结合律;
2.一个数异或自己等于0,例如:N^N=0 N^0=N (N为自然数);
3.一个不为0的数异或0的结果不变,例如:N^0=N (N为自然数不等于0);
异或运算相关题目:
1.一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数
/**
* 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数
*/
public static void findTwo(){
//思路,使用异或运算,因为其满足交换律和结合律,a^a=0;如果偶数次就一直是0
int[] arr={-10,2,2,2,2,3,3,6,7,6,7};
int err=0;
for (int i=0;i<arr.length;i++){
err^=arr[i];
}
System.out.println(err);
}
2.不声明变量交换两个值
public static void swap(int num1,int num2){
/**
* 底层逻辑:二进制时,无进位相加,二进制(相同为0,不同为1)
* 满足交换律和结合律
* 例如一个数a,a^a=0;a^0=a;
*/
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
}
3 条评论