异或: 相同为0,不同为1.(也可以当作"无符号相加")
异或满足交换律.
A ^ B ^ C ^ D = D ^ A ^ C ^ B
不用额外变量交换两个数
public static void main(String[] args) {
int a = 7;
int b = 10;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);
System.out.println(b);
}
题目一: 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数.
public static void main(String[] args) {
/*
* 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数
*/
int[] arr = {1,1,2,3,3,4,4,5,5};
int num = 0;
for (int i = 0; i < arr.length; i++) {
num = arr[i]^num;
}
System.out.println(num);
}
题目二: 取出一个整数中最右侧的1
public static void main(String[] args) {
// 2720(二进制形式:101010100000)
int a = 2720;
System.out.println(a & (-a));
}