异或 应用
作者:互联网
public static void process1(int[] arr) {
int eor = 0;
for (int ar : arr) {
eor ^= ar;
}
// eor = a ^ b 两个奇数 结果为 1
// eor != 0
// eor 必然有一个位置上是 1
/*
提取罪右侧的 1
eor : 1 0 1 0 1 1 1 1 0 0
~eor : 0 1 0 1 0 0 0 0 1 1
~eor + 1 : 0 1 0 1 0 0 0 1 0 0
& : 0 0 0 0 0 0 0 1 0 0
*/
int rightOne = eor & (~eor + 1);
int eor1 = 0;
for (int a : arr) {
if ((a & rightOne) != 0) {
eor1 ^= a;
}
}
System.out.println(eor1 + " " + (eor ^ eor1));
}
标签:arr,eor1,rightOne,int,eor,异或,ar,应用 来源: https://www.cnblogs.com/liuzonglin/p/16691635.html