<分区>
我确实有一个 8 位无符号整数,我想知道它有多少位设置为 1。 有一种简单的方法是将它与 0x01、0x02、0x04、0x08、0x0F、0x10、0x20、0x40、0x80、0xF0 进行 AND-ing (&),并为每个不为零的变量递增一个变量,但我'我想听听更复杂的解决方案。
<分区>
我确实有一个 8 位无符号整数,我想知道它有多少位设置为 1。 有一种简单的方法是将它与 0x01、0x02、0x04、0x08、0x0F、0x10、0x20、0x40、0x80、0xF0 进行 AND-ing (&),并为每个不为零的变量递增一个变量,但我'我想听听更复杂的解决方案。
最佳答案
使用 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];
}
关于c++ - 给定一个 uint8_t,找出设置了多少位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565238/