为了计算一个正整数中二进制表示1的个数。 我们可以采用查表的办法。
下面四位四位的计算:
0000对应0个1
0001对应1 个1
0010 对应1个1
....................
1110 对应3个1
1111对应4个1
所以我们建立如下size为16的数组用于映射0, 1, 2, 3, ....., 15这16个数字对应的整数1的个数。
#include <iostream>
using namespace std;
static int numBits[] = {0, 1, 1, 2,
1, 2, 2, 3,
1, 2, 2, 3,
2, 3, 3, 4};
int bitsCount(unsigned int n) {
int bitNumber = 0;
/*
// 方法二:
for(; n!= 0; n >>= 4) {
bitNumber += numBits[n & 0x0f];
}
*/
do {
bitNumber += numBits[n & 0x0f];
} while(n>>=4); // 注意必须是n>>=4, 不要忘了等号
return bitNumber;
}
int main() {
cout << bitsCount(15) << endl;
return 0;
}
运行结果如下: