2-9 bitcount()函数:统计x中值为1的二进制位数
#include <stdio.h>
int bitcount(unsigned x){
int b;
for(b=0;x!=0;x>>=1)
if(x&1)
b++;
return b;
}
int main ()
{
unsigned x=10;//将x声明为无符号整型数是为了保证将x右移时,无论该程序在什么机器上运行,左边空出的位数都用0(而不是符号位)填补。
int count;
count=bitcount(x);
printf("%d\n",count);
return 0;
}
表达式x&=(x-1)可以删除x中最右边值为1的一个二进制位。用这一方法重写bitcount函数,可以加快执行速度。
int bitcount(unsigned x){
int b;
for(b=0;x!=0;x&=(x-1))
b++;
return b;
}
本文介绍了一种统计无符号整数中1的二进制位数的方法,并通过使用位运算技巧来提高计算效率。文章给出了两种实现方式:一种是通过循环逐位检查,另一种是利用x &= (x-1)的特性来快速删除最右侧的1,从而减少迭代次数。

被折叠的 条评论
为什么被折叠?



