我正在阅读 C 语言的 K&R 书,在第 2.10 节中他们给出了以下示例:
/*bitcount: count 1 bits in x*/
int bitcount(unsigned x)
{
int b;
for(b=0; x!=0;x>>=1)
if(x&01)
b++;
return b;
}
该函数应该计算 x 中为 1 的位数。
我知道 if 应该“屏蔽”这些位,但我不明白怎么做?
这个条件基本上是:
if(x&01==1)?
我不明白这个条件。
(x&01) 是什么意思?
另外,我不明白循环什么时候停止?每当所有位都右移并且所有空出的单元格现在都为 0 时?
我只是不明白这个方法是如何工作的,我找了好久的解决方案。
谢谢。
最佳答案
让我们使用 while 循环重写该函数。
int bitcount(unsigned x)
{
int b = 0;
while (x != 0) {
if (x & 0x1)
b++;
x = x >> 1;
}
return b;
}
请注意,循环的每次迭代,我们都会做两件事:
- 如果数字的最低位为高(数字为奇数),则我们将位计数器加一。
- 每次迭代,我们将数字除以 2
(x = x >> 1)
。
关于c - 带 if 的位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314643/