如何计算整数中的零位数?

新手上路,请多包涵

我将如何在 C++ 中查找“零”位的数量。假设我有一个整数;

 int value = 276;

我有 100010100 位,但我如何计算零?

原文由 user349026 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 832
2 个回答

最简单最天真的方法是迭代位并计数:

 size_t num_zeroes = 0;

for(size_t i = 0; i < CHAR_BIT * sizeof value; ++i)
{
  if ((value & (1 << i)) == 0)
    ++num_zeroes;
}

有很多更好的(对于“更好”的不同值)方法,但这很清楚,非常简洁(代码方面),并且不需要一堆设置。

一种可能被认为是改进的微优化是不计算掩码来测试每个位,而是移动值并始终测试最右边的位:

 for(size_t i = 0; i < CHAR_BIT * sizeof value; ++i, value >>= 1)
{
  if ((value & 1) == 0)
    ++num_zeroes;
}

原文由 unwind 发布,翻译遵循 CC BY-SA 2.5 许可协议

使用c++20,可以使用标准库函数 bit_widthpopcount 来实现:

 #include <bit>
#include <cstdint>
#include <iostream>

int main()
{
    uint32_t i = 276;
    std::cout << std::bit_width(i) - std::popcount(i) << '\n'; // output: 6
}

原文由 Chao 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏