位1的个数

原创
2021/11/28 17:56
阅读数 66

位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;
}

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部