算法蒐集:求取二進制中1的個數

題:給定一個8bit的變量,求其二進制表示中“1”的個數。

算法一:

int Count(int v)
{
    int num=0;
    while(v)
    {
        if(v%2==1)
           num++;
        v=v/2;
    }
    return num;
}

算法二:
int Count(int v)
{
    int num=0
    while(v)
    {
        num+=v&ox01;
        v>>=1;
    }
    return num;
}

算法三:
int Count(int v)
{
    int num=0;
    while(v)
    {
        v&=(v-1);
        num++;
    }
    return num;
}

算法四:
int Count(int v)
{
    int num=0;
    switch(v)
    {
        case 0x0:
             num=0;
             break;
        case ox1:
        case 0x2:
        case 0x4:
        case 0x8:
        case ox10:
        case ox20:
        case ox40:
        case 0x80:
             num=1;
             break;
        ......    
     }
}
注:提供了一種以空間換時間的思路

算法五:
int countTable[256]=
{
   0,1,1,2,1,2,2,3,2,3,3......
     3,4,3,4,4,5,1,2,2,3......
     .........................
}

int Count(int v)
{
   return countTable[v];
}
注:查表法,以空間換時間,效率最高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章