#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;
}
输出是1字节。具有比其大小更多成员的比特场联合的大小
位字段成员超过8位会发生什么?显然我仍然可以为任何位域成员设置并获取正确的值。
UPDATE
感谢您对我的清理混乱。一方面的问题:这些位以什么顺序存储在内存中?假设它是小端存储器,所以0xabcd将作为0xd,0xc,0xb,0xa存储在内存中。
- m.a1是否会成为0xd或oxa的一部分?
- 它是第3位还是第0位0xd(或0xa)?
没有超过8位的成员。 'union'!='struct'。 – tkausl
@tkausl明白了..我混淆了struct/union/bit-fields .. :)谢谢。 – justanotherguy
你似乎把工会的规模与工会成员的规模混为一谈。通常,联合的大小等于其最大成员的大小 - 在这种情况下,它是一个字节,因为所有成员都是字符(四舍五入为字节大小,因为它是实际大小的最小单位) – SomeWittyUsername