The number of binary 1: Title ten

// This solution requires 32 cycles 
int BinaryOneNum ( int iNum) 
{ 
#if 0
     int iCount = 0 ;
     for ( int I = 0 ; I < 32 ; I ++ ) 
    { 
        IF (& iNum ( 0x01 << I)) 
        { 
            iCount ++ ; 
        } 
    } 

    return iCount; 

#else  

    int iCount = 0 ; 
    unsigned int uiFlag = . 1 ;
    the while (uiFlag) 
    { 
        IF (iNum & uiFlag) 
        { 
            iCount ++ ; 
        } 

        uiFlag = uiFlag << . 1 ; 
    } 

    return iCount;
 #endif 
} 

// This solution will experience negative cycle of death! ! ! ! 
int BinaryOneNum_1 ( int iNum) 
{ 
    int iCount = 0 ;
     the while (iNum) 
    { 
        IF (iNum & 0x01 ) 
        { 
            iCount ++ ; 
        }

        iNum = iNum >> . 1 ;   
    } 

    return iCount; 
} 

// optimal solution
 // 1100--> a Save -> 1001
 // 1100 is & 1001 -> 1000 
int BinaryOneNum_2 ( int iNum) 
{ 
    int iCount = 0 ;
     the while (iNum) 
    { 
        iCount ++ ; 
        iNum = (iNum - 1 ) & iNum;    // every time calculation, rightmost 1 is cleared 0 
    } 

    return iCount; 
} 

void BinaryOneNumTestFunc () 
{ 
    COUT<< "\n\n --------------- BinaryOneNumTestFunc Start -------------->" << endl;

    int aiArray[] = {0, 9, 100, 1000, 10000, 100000, 999999, 4353544, 675753, -32445, -3445, 34424, -111};
    int iLen = sizeof(aiArray) / sizeof(int);

    for (int i = 0; I <iLen; I ++ ) 
    { 
        the printf ( " Method a: (% d) the number of 1s in binary:% D \ n- " , aiArray [I], BinaryOneNum (aiArray [I])); 
    } 

    COUT << " ============================================== " << endl ; 

    for ( int I = 0 ; I <iLen; I ++ ) 
    { 
        IF (aiArray [I] < 0 ) 
        { 
            Continue ; 
        } 

        the printf ( " method two: (% d) binary number of 1:% D \ n- " , aiArray [I], BinaryOneNum_1 (aiArray [I])); 
    }

    cout << "==============================================" << endl;
    for (int i = 0; i < iLen; i++)
    {
        printf("方法三: (%d)二进制中1的个数: %d\n", aiArray[i], BinaryOneNum_2(aiArray[i]));
    }

    cout << "\n\n --------------- BinaryOneNumTestFunc End -------------->" << endl;

}

Guess you like

Origin www.cnblogs.com/yzdai/p/11258672.html