#include <stdio.h>
union mix {
unsigned char a1:1;
unsigned char a2:4;
unsigned char a3:4;
unsigned char a4:1;
unsigned char a5:4;
unsigned char a6:4;
unsigned char a7:1;
unsigned char a8:4;
unsigned char a9:4;
unsigned char a10:1;
unsigned char a11:4;
unsigned char a12:4;
};
int main() {
printf("Sizeof mix = %d bytes\n", sizeof(union mix));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出为1个字节.
超过8位的位域成员会发生什么?显然,我仍然可以为任何位字段成员设置并获取正确的值.
UPDATE
谢谢你清除我的困惑.一个问题:这些位以什么顺序存储在内存中?假设它是小端存储器,那么0xabcd将作为0xd,0xc,0xb,0xa存储在存储器中.