在this question中指出:
使用int [for bit mask]会遇到麻烦
我一直使用unsigned char
来存储位掩码标志,但是我发现我会达到下限,因为char只是一个字节,因此是8位,因此我的掩码中只有8个选项? / p>
enum options{
k1=1<<0,
k2=1<<1,
.... through to k8
}
unsigned char myOption=k2;
我是否只需要将myOption
设为int
或其他类型,例如,如果我希望它存储超过8种可能的选项(以及选项的组合,当然,因此为什么我是首先使用位掩码)?什么是最好的类型?
答案 0 :(得分:3)
如果您需要未知数量的“位”,可以使用类似std::vector<bool>
类的内容,请参阅此处:
http://www.cplusplus.com/reference/vector/vector-bool/
这是矢量类的特化,它可以使用位打包bool值,因此它比bool
的数组更节省空间(无论你需要额外的效率取决于你)。 / p>
当然我不知道你的应用程序是什么,使用位域有很多正当理由。如果你只是存储了一堆真值和假值,那么类似bool数组或者这个bools 的向量可能更容易维护(当然它有缺点,你无法测试看看是否在一次操作中设置了3位,就像屏蔽和位域一样,所以它是特定于应用程序的。)
我认为,{p>vector<bool>
有点争议。请参阅:http://howardhinnant.github.io/onvectorbool.html
答案 1 :(得分:2)
#include <stdint.h>
这定义了具有固定大小的类型,这些类型不是特定于编译器的。
int16_t = 16位
uint16_t = 16位无符号
int32_t = 32位
如果你需要超过64个标志,你应该考虑:: std :: vector&lt;&gt;正如Wayne Uroda所说。