1.什么是异或运算
2.异或运算的规则
- A ^ A=0
- A ^0 =A
- 异或运算满足交换律 A ^ B ^ C = B ^ C ^ A
3.异或练习
public static void main(String[] args) {
int a=5;
int b=5;
a=a^b;
b=a^b;
a=a^b;
System.out.println(a);
System.out.println(b);
}
- 题目2:一个数组中有一种数出现了奇数次, 其他都出现偶数次 打印出现奇数次的数
public class 打印出现奇数次的数 {
public static void main(String[] args) {
int oddNumber = findOddNumer(new int[]{1, 1,2, 2, 2, 2, 3});
System.out.println(oddNumber);
}
private static int findOddNumer(int[] arr) {
int oddNumber=0;
for (int i = 0; i < arr.length; i++) {
oddNumber = oddNumber ^ arr[i];
}
return oddNumber;
}
}
- 题目3: 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数
public class 找出出现奇数次数2 {
public static void main(String[] args) {
int[] arr1 = {1, 1, 2, 2, 2, 2, 2, 4, 5, 5};
int[] ints = twoOdds(arr1);
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
}
private static int[] twoOdds(int[] arr) {
int result = 0;
for (int i = 0; i < arr.length; i++) {
result ^= arr[i];
}
int rightOne = result & (~result + 1);
int a = 0;
for (int i = 0; i < arr.length; i++) {
if ((arr[i] & rightOne) != 0) {
a ^= arr[i];
}
}
return new int[]{a, a ^ result};
}
}