如何判断一个byte数据中有多少bit为1?
以下是Brian W. Kernighan公开的一个方法
第一种,与上自己减一的数(最优方案)
unsigned bit_count(unsigned v)
{
unsigned int c; //置位总数累计
for (c = 0; v; c++)
{
v &= v - 1; //去掉最低的置位
}
return c;
}
// 15的二进制为1111, 调用后为1的bit数为 4
unsigned bitNum = bit_count(15);
第二种,移数据
int fun1(int data)
{
int count=0; //计数
while(data)
{
count += data&1; //检查Num最后一位是否为1
data>>=1;
}
return count;
}
第三种,移1
int fun2(int data)
{
int count=0;
int bit_1=1;
while(bit_1)
{
if(data&bit_1)count++;
bit_1<<=1;
}
return count;
}
第一种,效率最高;
第二种,如果是个负数,可能会出问题;
第三种,虽然不会出现什么问题,但是效率没有第一种、第二种高