有没有办法在C ++中使用布尔值作为位图?
代码示例:
bool boolean = false;
boolean &= ~(1 << 0);
boolean |= 1 << 2;
boolean |= 1 << 1;
cout << "boolean : " << boolean << endl;
bool bit1 = boolean & (1 << 2);
bool bit2 = boolean & (1 << 1);
bool bit3 = boolean & (1 << 0);
cout << "bit1 : " << bit1 << endl;
cout << "bit2 : " << bit2 << endl;
cout << "bit3 : " << bit3 << endl;
输出:
boolean : 1
bit1 : 0
bit2 : 0
bit3 : 1
答案 0 :(得分:4)
您是否可能会考虑类似std::bitset
的内容?
bitset是一个特殊的容器类,用于存储位(只有两个可能值的元素:0或1,
true
或false
,...)。该类与常规数组非常相似,但优化空间分配:每个元素只占一位(比C ++中最小的元素类型小8倍:
char
)。每个元素(每个位)都可以单独访问:例如,对于名为
mybitset
的给定位集,表达式mybitset[3]
访问其第四位,就像常规数组访问其元素一样。 / p>
在您的代码示例中,您正在使用(或滥用)布尔实例实际上表示为至少1个字节的整数类型值,因此大小为8位(标准可能更精确地定义)。
所以在实践中你可以在bool
值中进行位翻转,但我的赌注是结果未定义。即使不是,也是非常不寻常的,因此很难被别人理解和维护。因此,您最好将标准int
用于此类目的。