c++ - 给定一个 uint8_t,找出设置了多少位

标签 c++ binary

<分区>

我确实有一个 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/

相关文章:

c++ - 如何使我的 C++ ActiveX 控件在 Excel 中很好地打印?

c++ - 在 C++ 中使用 std::unique_ptr 管理原始内存

c# - C++ 引用与 C# 引用

java - 移位时字节值的内存分配

java - 打开一个二进制文件并打印该文件中的所有 ASCII 字符

c++ - 将 Big-Endian 结构转换为 Little-Endian C++

通过类型别名实现 C++ 不变性

c++ - view_as 在 Boost Polygon 库中的使用

C - 有什么方法可以使用位检查来检查数字是否等于 1?

javascript - 将数组缓冲区转换为字符串 - 超出最大调用堆栈大小