有没有办法使用布尔在c++中作为一个位图

Is there way to use a boolean in C++ as a bitmap?

本文关键字:位图 一个 布尔 c++ 有没有      更新时间:2023-10-16

是否有办法在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

你可能在考虑像std::bitset这样的东西吗?

bitset是一个特殊的容器类,用于存储位(只有两个可能值的元素:0或1,truefalse,…)。

这个类与常规数组非常相似,但是对空间分配进行了优化:每个元素只占用一个比特(比c++: char中最小元素类型少8倍)。

每个元素(每个位)都可以单独访问:例如,对于给定的bitset mybitset,表达式mybitset[3]访问它的第四个位,就像普通数组访问它的元素一样。

更新

在您的代码示例中,您正在使用(或滥用)布尔实例实际上表示为至少1字节的整型值,因此大小为8位(标准可能更精确地定义了这一点)。

因此,在实践中,您可以在bool值中进行位翻转,但我打赌结果是未定义的。即使没有,它也是非常不寻常的,因此很难被其他人理解和维护。因此,您最好使用标准的int s。