给定uint8_t,找出设置了多少位

时间:2015-04-10 15:28:27

标签: c++ binary

我有一个8位无符号整数,我想知道有多少位设置为1。 通过AND(和)它与0x01,0x02,0x04,0x08,0x0F,0x10,0x20,0x40,0x80,0xF0并为每个不为零的变量递增一个变量有一个微不足道的方法,但我和#39;希望听到更复杂的解决方案。

2 个答案:

答案 0 :(得分:2)

使用builtin

int bits_set(uint8_t x) {
    return __builtin_popcount(x);
}

或制作一张桌子:

int bits_set(uint8_t x) {
    // easy enough to generate this
    static const uint8_t table[] = {0, 1, 1, 2, 1, 2, ... };

    // then it's just a lookup
    return table[x];
}

答案 1 :(得分:2)

你可以使用带位移的while循环:

uint8_t someInt = 13;
int num_ones = 0;

while (someInt)
{
    num_ones += someInt & 1;
    someInt = someInt >> 1;
}