-1

我需要使用位图。基本上,处理一组几百个整数的数字需要一个wchar_tor数组。int16_tchar16_t

应该首选什么?使用其中一个有什么优势吗?

4

2 回答 2

2

如果你想要一个位图,也许可以考虑使用std::bitset

引用链接:

类模板位集表示一个固定大小的 N 位序列。位集可以由标准逻辑运算符操作并转换为字符串和整数。

优点是很容易将位数扩展到任意数量。构造函数可以采用整数类型来初始化位集。

考虑此文档文章中的示例:

输入

#include <iostream>
#include <bitset>

int main()
{
    std::bitset<8> b1(42);
    for (std::size_t i = 0; i < b1.size(); ++i) {
        std::cout << "b1[" << i << "]: " << b1[i] << '\n';
    }
    b1[0] = true; // modifies the first bit through bitset::refence
    std::cout << "After setting bit 0, the bitset holds " << b1 << '\n';
}

输出

b1[0]: 0
b1[1]: 1
b1[2]: 0
b1[3]: 1
b1[4]: 0
b1[5]: 1
b1[6]: 0
b1[7]: 0
After setting bit 0, the bitset holds 00101011
于 2013-08-05T05:33:59.637 回答
1

你需要多少个旗帜?如果你需要 8 使用一个字符,如果你需要 16 使用一个短。仅使用所需的空间,但请确保不要过度优化并将自己(或项目)绘制到角落。

如果您不知道它是如何工作的,那么每个标志只不过是占据整数中特定位的 2 的幂的友好名称。

1 是第一位 2 是第二位 4 是第三位 8 是第四位 以此类推...

例如,如果您有两个标志 READ_ACCESS = 2 (0010) WRITE_ACCESS = 8 (1000)

您将标志设置为读/写,那么您的整数将具有 10 (1010) 的值。

所以一个字符有 8 位,这将允许你有 8 个标志。一种选择相对于另一种选择的唯一好处是尺寸。如果您有嵌入式设备,请明智地选择,如果您有典型的台式机,请做出自由选择,例如 long,并为自己留出一些摆动的空间。

于 2013-08-05T05:57:16.220 回答