位1的个数:
编写一个函数,输入一个无符号整数,返回其二进制表达式中数字位数为‘1’的个数(也称为汉明重量)。
示例:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串00000000000000000000000000001011中,共有3位为'1'。
解题思路:
利用2进制数 1& 0 = 0, 10 - 01 = 01, x & (x -1) 则消去x最右边的1.
c语言代码:
#include <stdio.h>
int count_ones(unsigned long ulNum)
{
int iCount = 0;
while(ulNum)
{
ulNum &= (ulNum -1);
++iCount;
}
return iCount;
}
int main(void)
{
unsigned long ulNum = 19;
printf("Number of 1 is %d\n",count_ones(ulNum));
return 0;
}