编写一段代码,统计变量num中二进制数中1的个数
我们的方法是逐位判断,具体方法是当前位与1做位与操作,而其他位与0做位于操作,如果结果不为0,则说明当前位是1,计数,否则当前位是0,不计数。将num每次右移一位,再与1做案位于操作。
方法一
int getNum(int num)
{
int count;
for(count=0;num!=0;num=num>>1)
{
if(num&1){
++count;
}
}
return count;
}
方法二
思路是每次循环统计二进制数中最后一个1(最右边的那个1),统计完成后将最后一个1移除。移除的方法是将原数字与原数字减1的差做逻辑与。
int getNum(int num)
{
int count;
for(count=0;num!=0;num&=num-1)
{
++count;
}
return count;
}