Gre*_*reg -1 c binary integer bit
我试图更多地了解比特,我遇到了这个例子.
这段代码如何计算这些位?(顺便说一句,我的C很生锈).
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; v >>= 1)
{
c += v & 1;
}
Run Code Online (Sandbox Code Playgroud)
v & 1如果设置了最低位,则为1;如果不是,v则为0.
循环保持在v每次迭代时将右边的位移位1位,因此v在原始位置上的每个位上的最低位循环v(因为每个位在"分离"小数结束之前到达1的位置).
因此,它在每个位上循环并且如果它被设置则将c加1,如果不是则加0,从而总计原始v中的设置位.
例如,对于一个开始v的1011:
1011 & 1 = 1,所以c增加到1.1011转移成为101.101 & 1 = 1,所以c增加到2.101变成了10.10 & 1 = 0,所以c不增加并保持2.10变成了1.1 & 1 = 1,所以c增加到3.1转移成为0(因为最后一点从分数结束).for循环的条件是正好的v,并且v现在是0,这是一个假值,循环停止.最终结果,c = 3,正如我们所希望的那样.