对于位图,我应该使用wchar_t、int16_t还是char16_t
Should I use wchar_t or int16_t or char16_t for a bit map.
我需要使用位图。基本上,需要一个wchar_t
或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,请使用char,如果您需要16,请使用short。只使用你需要的空间,但要确保你不会过度优化,把自己(或项目)画到角落里。
如果你不知道它是如何工作的,那么每个标志只不过是占用整数中特定位的二次方的友好名称。
1是第一位2是第二位4是第三位8是第四位等等。
例如,如果您有两个标志READ_ACCESS=2(0010)WRITE_ACCESS=8(1000)
如果将标志设置为读/写,则整数的值为10(1010)。
因此,一个字符有8个位,这将允许您有8个标志。一种选择比另一种选择的唯一好处是尺寸。如果你有嵌入式设备,明智地选择,如果你有一个典型的桌面,做一个自由的选择,比如一个长的,给自己留一些回旋的空间。
相关文章:
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 'const char*'和'WCHAR*'
- 为什么需要与 WCHAR 相关的代码处理
- 无法使用 mingw-w64 g++ 编译:找不到 <wchar.h>
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 无法使用 swprintf 在 WCHAR* 中打印字符*
- -fshort-wchar 和 std::wstring - 分段错误
- 我应该使用 wchar 还是 char 来加密?
- C++中饱和短 (int16)
- 【MacOSX 10.15.1】使用 odb 生成数据库,致命错误:wchar.h:没有这样的文件或目录 #include < wchar.h>
- 如何在 C++ 中的 wcstok 中使用常量 WCHAR* 变量?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 比较嵌套 for 循环中的两个 wchar 数组?
- wchar 模式下 pugixml 的链接错误
- strcmp 错误'WCHAR [260]' 'const char *'
- 如何将 int16 数组更改为矢量<float>
- 'Cannot add two pointers'添加带有 WCHAR 的 LPCWSTR
- 将数组类型更改为 Int16 会节省存储空间吗?
- uint32, int16, uint8 .为什么这些常用的数据类型没有进入标准