您的位置:首页 > 编程语言 > C语言/C++

确定一个整数的2进制中有几个bit"1"写法

2013-04-18 13:02 162 查看
/******************************************************************************************************
确定一个整数的2进制中有几个bit"1"写法
注意不断右移判断最低位是1有多少个的算法是错误的,
因为根据GNU C/C++的实现来看,负数是带符号填充进行右移的,所以如果是负数,该算法会死循环。
C++可以强制转换成无符号整数再处理
下面的程序是正解。其中num &= (num - 1) 会消除num的最小位置的"1"
*******************************************************************************************************/
#include <stdio.h>
int calBitNum(int num)
{

int numOnes = 0;

while (num != 0)
{

num &= (num - 1);

numOnes++;

}

return numOnes;

}
int main()
{
int m=1;
while(m)
{
printf("please input m\n");
scanf("%d",&m);
printf("the number of 1 is %d\n",calBitNum(m));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CC++ 笔试面试 C++ 算法
相关文章推荐