开发者社区 问答 正文

求二进制数中1的个数

编程之美中的一道题,有一个解法想不明白 该算法只考虑1的个数 代码如下:

int Count(BYTE v)
{
    int num = 0;
    while(v)
    {
        v &= (v-1);
        num++;
    }
    return num;
}

在网上看了一下都只是把算法给出来都没有解释,哪位同学帮忙解释一下,想不明白.多谢

展开
收起
a123456678 2016-06-06 09:54:23 2096 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 算法里面v &= (v-1);这一句的含义就是将二进制中最右边的一个1去掉
    去掉一次num增加1

    比如:
    v=13 二进制1101
    v-1=12 二进制1100
    相与结果为 1100
    v-1=11 二进制 1011
    相与结果为 1000
    v-1=7 二进制 0111
    相与结果为 0000
    就退出循环

    每次相与后都是去掉最右边的一个1

    2019-07-17 19:27:42 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等