计算一个unsigned int数包含多少个1,源码:
#include <iostream>
using namespace std;
// 计算一个unsigned int数含多少个1
int bitCount1(unsigned int word)
{
int n = 0;
int density[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; // 计算出0-15各包含多少个1
while(word)
{
n += density[word & 0xF]; // 取最后4位
word >>= 4; // 4位为一组,每4 bit可以产生2的4次方个组合,所以density数组为16个元素
}
return n;
}
// 计算一个unsigned int数含多少个1
int bitCount2(unsigned int word)
{
int n = 0;
while(word)
{
n += (word & 0x1); // 取最后一位
word >>= 1; // 右移一位
}
return n;
}
int main()
{
unsigned int word = 0x18F;
cout<<bitCount1(word)<<endl;
cout<<bitCount2(word)<<endl;
return 0;
}