我正在阅读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)
.