int findfirstOne(int number)
{
int index = 0;
while(( number&1 ==0) && (index < 8 * sizeof(int))){
number >>= 1;
index++;
}
return index;
}
bool isBit1(int number, int index){
return (number>>index)&1 ;
}
void FindAppearOnce(int data[], int length, int &num1, int &num2)
{
if(data == NULL || length <1) return ;
int resultor = 0;
for( int i = 0; i < length; ++i)
resultor ^= data[i];
int index = findfirstone(resultor);
numb1 = 0; numb2 = 0;
for( int i = 0 ; i< length ; ++i)
{
if(isbit1(data[i], index))
numb1 ^= data[i];
else
numb2 ^= data[i];
}
}