#include<stdio.h>
int locted_one(int value)
{
int i=0,n=value,count=0;
for(i=0; i<32; i++){
if((n&1)==1){
return count;
}count++;n=n>>1;
}
return 0;
}
void only_two(int arr1[],int sz)
{
int i=0;int j=0;int k=0;int arr2[10];int num=arr1[0];
for (i=1; i<sz; i++){
num^=arr1[i];
}
k=count_one_bit(num); //确定num中1所在的比特位
for (i=0; i<sz; i++) //根据num中1所在的比特位将数组分为两部分每一部分只含有一个只出现一次的数{
if ((arr1[i]>>k)&1)
{arr2[j]=arr1[i];j++;
}
}
k=j;
for (j=1; j<k; j++){
arr2[0]^=arr2[j];
}
num^=arr2[0];
printf("%d %d\n",num,arr2[0]);
}
int main()
{
int arr[]={1,2,3,4,5,6,7,36,11,7,6,5,4,3,2,1};int sz=sizeof(arr)/sizeof(arr[0]);only_two(arr,sz);
system("pause");
return 0;
}