最简单的方法是: 遍历每个位
int bitcount(unsigned int x) {
int b;
for (b = 0; x != 0; x >>= 1)
if (x & 0x1)
++b;
return b;
}
如果知道x&=x-1将会减少x二进制中最右边的1(The C Programming Language, 2nd, ch2.10 Exercise2-9), 则会有另外一种更高效的方法:
int bitcount(unsigned int x) {
int b;
for (b = 0; x != 0; x &= x - 1)
++b;
return b;
}
还可以联想到另外一个问题: 如何判断一个整型变量是2的N次方? (程序员面试宝典, 第二版, ch5.5 例题1)
References:
The C Programming Language, 2nd, Prentice Hall, ch2.10
程序员面试宝典, 第二版, 电子工业出版社, ch5.5