在这个问题中,有人指出:
使用int [for位掩码]是自找麻烦
我一直在使用unsigned char
来存储位掩码标志,但我想到我会达到低限制,因为一个字符只是一个字节,因此8位,因此在我的掩码中只有8个选项?
enum options{
k1=1<<0,
k2=1<<1,
.... through to k8
}
unsigned char myOption=k2;
我是否只需要使myOption
和int
或其他类型,例如,如果我希望它存储超过8个可能的选项(和选项的组合,当然,因此为什么我首先使用位掩码)?哪种类型最好?
如果您需要一个未知数量的'位',您可以使用类似std::vector<bool>
类的东西,参见这里:
这是vector类的专门化,它可以使用位来打包bool值,因此它比bool
s数组的空间效率更高(是否需要额外的效率取决于您)。
当然我不知道你的应用程序是什么,有很多有效的理由使用位域。如果你只是简单地存储一堆真值和假值,那么像bool数组或bool向量这样的东西可能更容易维护(当然,它也有缺点,你不能像使用掩码和位域那样测试是否在一次操作中设置了3位,所以它是特定于应用程序的)。
我认为 vector<bool>
是有争议的。参见:http://howardhinnant.github.io/onvectorbool.html
#include <stdint.h>
这定义了与编译器无关的固定大小的类型。
int16_t = 16 bits
uint16_t = 16 bits unsigned
int32_t = 32位
如果你需要超过64个标志,你应该考虑Wayne Uroda建议的::std::vector<>