以下是求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;
}