定义可以访问位,半字节,字节的联合

union bits { unsigned int a : 1; unsigned int b : 2; unsigned int c : 3; unsigned int d : 4;`` unsigned char x[2]; unsigned int z; }; 

假设在32位的并集中,我需要使用单个位,或一组位,或半字节或字节。 有没有办法来定义联盟。

你需要一个位域联合。 如果您只使用联合,则所有字段都将指向同一位置。

 union{ struct { unsigned int bit1 : 1; unsigned int bit2 : 1; unsigned int bit3 : 1; unsigned int bit4 : 1; unsigned int bit5 : 1; unsigned int bit6 : 1; unsigned int bit7 : 1; unsigned int bit8 : 1; ... unsigned int bit32 : 1; }; struct { unsigned int nibble1 : 4; unsigned int nibble2 : 4; ... }; struct { unsigned int byte1 : 8; unsigned int byte2 : 8; ... }; unsigned int int_value; } 

您可以在结构中使用位域,如下所示:

 typedef union { struct { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; }bits; unsigned char byte; }byte; 

如果你有byte b; ,你可以像这样访问每一位: b.bits.bit1