【问题标题】:a bit map in c++ - will unsigned int do the job?c++ 中的位图 - unsigned int 会完成这项工作吗?
【发布时间】:2011-07-23 10:36:34
【问题描述】:

我不敢承认,我已经有一段时间没有使用 C++ 了,但我现在不得不使用 C++,而且我有点生疏了。
我需要一个位图,而且我确实关心性能,我的位图大小将不再是 25 位。
我在考虑使用 unsigned int,但恐怕我不记得它是如何在 c/c++ 中实现的

unsigned int 是否实现为常规二进制数?
我也愿意接受有关位图的任何其他建议。
提前感谢您的帮助!

【问题讨论】:

  • 根据this thread on meta,我们被称为Stackers,而不是overflowers。 :)
  • 为什么这个标签是C?在C unsigned int 保证有16个或更多的int;您需要 32 位或更多位的 unsigned long

标签: c++ c bitmap unsigned-integer


【解决方案1】:

使用来自标头<bitset>std::bitset<25>bitset 可以使用 [] 进行索引,并且是一个模板,因此它可能会扩展为仅包含所有操作的 unsigned int(或等效项)。

【讨论】:

  • 它的性能好吗?特别是如果所有位都清楚,我需要检查很多次。
  • @amit:它是一个模板类,因此性能可能与滚动您自己的相同或更好。
  • @amit 我认为它可能会比你的 Java 更好!
  • @amit,any() 方法允许您对此进行测试,我敢说调用它和比较 0 之间几乎没有区别。
  • @David,这可能是我不在 java 中这样做的原因。
【解决方案2】:

您是否考虑过 std::bitset 来自 <bitset> 头文件?

例子:

#include <iostream>
#include <bitset>

int main() {
        std::bitset<25> bits(146);
        std::cout << bits << std::endl;

        //using operator[] to access individual bit manually!
        for(size_t i = 0 ; i < bits.size() ; ++i)
           std::cout << bits[i] << " ";
        return 0;
}

输出:

0000000000000000010010010
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

注意:bits[0] 是最低有效位,而bits[bits.size()-1] 是最高有效位!

在线演示:http://ideone.com/3sSF0

【讨论】:

    【解决方案3】:

    请考虑使用bitset

    【讨论】:

      【解决方案4】:

      你应该能够为位图使用整数类型,假设它有足够的位供你使用。

      但是,标准库中有一个&lt;bitset&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-07
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        • 2013-01-17
        • 2017-09-10
        • 1970-01-01
        相关资源
        最近更新 更多