位对齐,8-bools-in-1

时间:2011-04-12 11:21:19

标签: bitmap bit-manipulation bit bitarray bitvector

我正在尝试编译以下代码:

union Bool
{
  bool b[8] : 8; // (1)
  bool b0,b1,b2,b3,b4,b5,b6,b7 : 1;
};

然而,第(1)行没有编译,有什么比特对齐数组的语法?

1 个答案:

答案 0 :(得分:1)

您无法在C中声明位数组。

数组的概念基于指针,您只能指向字节,而不能指向字节中的各个位。 C位字段允许您将整数组件打包到比默认情况下编译器更少的内存中。数组不是整数,因此您无法将数组打包到位字段中。如果您想阅读标准,可以在ISO/IEC 9899 - Programming languages - C找到它(查找§6.7.2.1)。

如果您需要速度,可以使用bool数组的并集,如果需要紧凑的内存占用,则可以定义宏以便更方便地访问位字段。