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

来源:互联网 发布:热血战歌翅膀升阶数据 编辑:程序博客网 时间:2024/06/06 03:40
/******************************************************************************************************确定一个整数的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));    }}

原创粉丝点击