C程序设计语言,练习2-9
逐个删除x最右边值为1的二进制位,直至x的值为0.
测试结果与代码如下,有bug欢迎指正!
代码:
#include <stdio.h>
int bitcount(unsigned x);
int main()
{
unsigned a;
int i;
for(i = 0; i < 3; i++)
{
printf("输入一个十六进制数:");
scanf_s("%X",&a,sizeof(unsigned));
printf("值为1的位数:%d\n",bitcount(a));
}
return 0;
}
int bitcount(unsigned x)
{
int b = 0;
while(x != 0)
{
x &= (x-1);
b++;
}
return b;
}