编程之美中的一道题,有一个解法想不明白 该算法只考虑1的个数 代码如下:
int Count(BYTE v)
{
int num = 0;
while(v)
{
v &= (v-1);
num++;
}
return num;
}
在网上看了一下都只是把算法给出来都没有解释,哪位同学帮忙解释一下,想不明白.多谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
算法里面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
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)