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]; } }