与 char 相比的位域大小

Size of bit field compared to a char

所以我知道

struct bit
{
    unsigned char a : 1;
}

因为padding还是会占用一个字节,我的问题是:

struct bit
{
    unsigned char a : 1;
    ...
    unsigned char h : 1;
}

这个结构会占用与 char 相同的大小吗?如果是这样,我最好只使用 char 吗?我问是因为我想使用位作为键,但我宁愿尽可能避免按位运算。

使用 bit-fields 时没有任何保证。该结构可以具有任何大小和任何位顺序。事实上,bit-fields 的 unsigned char 类型甚至不受标准支持!您的代码已经依赖 non-standard 扩展。

忘记 bit-fields,忘记 char。如果你想要可预测的、可移植的代码,你应该使用 uint8_t 和按位运算符。