#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