计算二进制中有多少个1的五种方法

1.用mol2的方法

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

2.使用位运算

int count(BYTE v){
    int num = 0;
    while (v){
        num += v & 0x01;
        v>>1;
    }
    return num;
   }

3.位运算(时间复杂度为O(M))

这种只考虑与1的个数相关,M为1的个数,最为巧妙

int count(BYTE v){
    int num = 0;
    while (v){
        v&=(v-1);
        num++;
    }
    return num;
   }

4.把包含相同个数1的枚举在一起,时间复杂度不能确定。

代码就不列了

5.打表,时间复杂度为O(n)

你可能感兴趣的:(巧妙的二进制)