找出一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的(使用位运算)

 要求使用位运算     
 异或运算:相同为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 }

猜你喜欢

转载自www.cnblogs.com/cuckoo-/p/10363428.html