对于位图,我应该使用wchar_t、int16_t还是char16_t

Should I use wchar_t or int16_t or char16_t for a bit map.

本文关键字:wchar int16 char16 还是 于位图 位图 我应该      更新时间:2023-10-16

我需要使用位图。基本上,需要一个wchar_tint16_tchar16_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个标志。一种选择比另一种选择的唯一好处是尺寸。如果你有嵌入式设备,明智地选择,如果你有一个典型的桌面,做一个自由的选择,比如一个长的,给自己留一些回旋的空间。