您好,匿名用户
随意问技术百科期待您的加入

求二进制数中1的个数

0 投票

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

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

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

用户头像 提问 2014年 6月7日 @ 卫宫士郎 上等兵 (173 威望)
分享到:

1个回答

0 投票

算法里面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

用户头像 回复 2014年 6月7日 @ Jax 上等兵 (324 威望)
提一个问题:

相关问题

0 投票
1 回复 54 阅读
用户头像 提问 2012年 12月1日 @ Olaf 上等兵 (366 威望)
0 投票
1 回复 37 阅读
0 投票
1 回复 53 阅读
0 投票
0 回复 21 阅读
用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 21 阅读
用户头像 提问 2013年 11月14日 @ Nocturne 上等兵 (262 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...