位操作_求二进制中1的个数

以下是求x中二进制1的个数的两种方法,第一种是比较常规的逻辑进行循环移位直至为0结束。第二种效率更高些,不需要循环移位,每次只去掉x中的最后一位。(x&(x-1)可实现去除掉最后一位1。另外如果数中1的个数只有一个,那么这个数是2的n次方。)

uint8_t Bit1Count_A(unsigned long x)
{
    uint8_t count = 0;
    
    while(x) {
        if ((x & 1) == 1)
            count++;
        x >>= 1;
    }

    return count;
}

uint8_t Bit1Count_B(unsigned long x)
{
    uint8_t count = 0;
    
    while(x) {
        x &= (x-1);
        count++;
    }

    return count;
}
点赞