//^运算:无进位相加,满足结合律与交换律
//例:整型数组中,只有一个数出现了奇数次,其余数出现了偶数次,求这个数
//例:整型数组中,只有两个数出现了偶数次,其余数出现了偶数次,求这两个数
public class Test1 {
public void one(int nums[]){
int r = 0;
for (int num : nums) {
r ^= num;
}
System.out.println(r);
}
public void two(int[] nums){
int r = 0;
for (int num : nums) {
r ^= num;
}
//若设这两个数分别为a,b,,则此时r==a^b;
//a!=b,则r的某一位一定为1,找出r最右则为一的位,并以此为依据将数组中的数进行分类
int q = r & (~r + 1);//取r最右侧的1
int r1 = 0;
for (int num : nums) {
if ((num&q)==0){
r1 ^= num;
}
}
System.out.println(r1+" "+(r^r1));
}
}