首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释计数位设置的原因,Brian的工作方式

解释计数位设置的原因,Brian的工作方式
EN

Software Engineering用户
提问于 2015-12-12 00:52:58
回答 1查看 1.6K关注 0票数 3

我找到了此链接可计数变量中的位数。。我觉得挺酷的,但我搞不懂为什么会起作用。有人能解释一下吗?

这是代码

代码语言:javascript
复制
unsigned int v; // count the number of bits set in v
unsigned int c; // c accumulates the total bits set in v
for (c = 0; v; c++)
{
  v &= v - 1; // clear the least significant bit set
}

任何帮助都是非常感谢的。

EN

回答 1

Software Engineering用户

发布于 2017-09-04 00:50:23

我加入了这个答案,这与上面的答案相似,但在看待事物方面略有不同,所以它可能会对某人有所帮助。

假设我们取1111 (二进制数)并从中减去1,得到1110 &再次减去1,我们得到,1101,我们看到一个模式出现,即从二进制数减去1,将所有的0's翻转到最小的'1‘位的右边,然后将'1’本身翻转到0(假设最重要的位是最左边的位,最不重要的位是最右边的位)。

所以,假设我们有v= 14,在二进制是1110,然后得到v-1,首先把零翻转到最小值1到'1‘的右边,这给我们1111,然后把最小的1本身翻转到零,给我们1101。

现在,我们知道,在数字'v‘和' v-1’中,所有1's都将保留在最小值1的左边,其余的数字将被‘&d’变为零,因此比数字中实际设置的位数少1,也就是说,在1110的情况下,v&v-1= 1100,比它的前身设置的位数少1位。这个过程发生在相同数量的'1's中,就像我们存储在计数变量中的比特数一样。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/304876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档