我需要使用位图。基本上,处理一组几百个整数的数字需要一个wchar_t
or数组。int16_t
char16_t
应该首选什么?使用其中一个有什么优势吗?
如果你想要一个位图,也许可以考虑使用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
你需要多少个旗帜?如果你需要 8 使用一个字符,如果你需要 16 使用一个短。仅使用所需的空间,但请确保不要过度优化并将自己(或项目)绘制到角落。
如果您不知道它是如何工作的,那么每个标志只不过是占据整数中特定位的 2 的幂的友好名称。
1 是第一位 2 是第二位 4 是第三位 8 是第四位 以此类推...
例如,如果您有两个标志 READ_ACCESS = 2 (0010) WRITE_ACCESS = 8 (1000)
您将标志设置为读/写,那么您的整数将具有 10 (1010) 的值。
所以一个字符有 8 位,这将允许你有 8 个标志。一种选择相对于另一种选择的唯一好处是尺寸。如果您有嵌入式设备,请明智地选择,如果您有典型的台式机,请做出自由选择,例如 long,并为自己留出一些摆动的空间。