0

这个问题中,有人指出:

使用 int [for bit mask] 自找麻烦

我一直在使用 anunsigned char来存储位掩码标志,但我突然想到我会达到下限,因为 char 只是一个字节,因此是 8 位,因此我的掩码中只有 8 个选项?

enum options{
 k1=1<<0,
 k2=1<<1,
  .... through to k8
 }

 unsigned char myOption=k2;

例如,如果我希望它存储超过 8 个可能的选项(当然还有选项的组合,因此我为什么首先使用位掩码),我是否只需要制作myOption一个或其他类型?int最好的类型是什么?

4

2 回答 2

3

如果您需要未知数量的“位”,您可以使用类之std::vector<bool>类的东西,请参见此处:

http://www.cplusplus.com/reference/vector/vector-bool/

这是向量类的一个特化,它可以使用位来打包 bool 值,因此它比bools 数组更节省空间(是否需要额外的效率取决于你)。

当然我不知道你的应用程序是什么,使用位域有很多正当理由。但是,如果您只是存储一堆真值和假值,则可能更容易维护诸如布尔数组或此布尔向量之类的东西(当然,它有缺点,您无法测试是否说 3 位是所有设置在一个操作中,就像您可以使用屏蔽和位域一样,因此它是特定于应用程序的)。

vector<bool>不过,我认为这有点争议。见:http ://howardhinnant.github.io/onvectorbool.html

于 2013-05-15T03:29:51.120 回答
2
#include <stdint.h>

这定义了具有固定大小的类型,这些类型不是特定于编译器的。

int16_t = 16 位

uint16_t = 16 位无符号

int32_t = 32 位

如果您需要超过 64 个标志,您应该考虑 ::std::vector<> 正如 Wayne Uroda 建议的那样。

于 2013-05-15T04:27:43.747 回答