有没有办法在C ++中使用布尔值作为位图?

时间:2011-04-13 13:19:50

标签: c++

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

1 个答案:

答案 0 :(得分:4)

您是否可能会考虑类似std::bitset的内容?

  

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

     

该类与常规数组非常相似,但优化空间分配:每个元素只占一位(比C ++中最小的元素类型小8倍:char)。

     

每个元素(每个位)都可以单独访问:例如,对于名为mybitset的给定位集,表达式mybitset[3]访问其第四位,就像常规数组访问其元素一样。 / p>

更新

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

所以在实践中你可以在bool值中进行位翻转,但我的赌注是结果未定义。即使不是,也是非常不寻常的,因此很难被别人理解和维护。因此,您最好将标准int用于此类目的。