要求使用位运算
异或运算:相同为0,不同为1, a[]={1,2,5,6,8,8,1,2,6}
1^x=-x , 0^x=x b[]={1,1,2,2,5,6,6,8,8}
举例a[]
1: 0 0 0 1
2: 0 0 1 0 0011--> 1与2异或运算的结果
5: 0 1 0 1 0110--> 上面运算结果与5在运算的结果
6: 0 1 1 0 0000--> 依次类推
8: 1 0 0 0 1000
8: 1 0 0 0 0000
1: 0 0 0 1 0001
2: 0 0 1 0 0011
6: 0 1 1 0 0101
总结:(异或的结果和数的运算顺序无关,对应位的异或结果和对应位所有数中1的个数有关:偶数个1,结果为0,奇数个1,结果为1)
1 #include<stdio.h>
2 int main()
3 {
4 int a[11] = { 1,2,6,7,7,1,2,9,6,9,10 };
5 int ret = 0;
6 for (int i = 0;i < 11;++i)
7 {
8 ret ^= a[i];
9 }
10 printf("%d\n",ret);
11
12 return 0;
13 }
找出一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的(使用位运算)
原文:https://www.cnblogs.com/cuckoo-/p/10363428.html