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位的并集中, 我需要使用单个位,或一组位,或半字节或字节。有没有办法来定义联盟。
答案 0 :(得分:4)
你需要一个位域联合。如果您只使用联合,则所有字段都将指向同一位置。
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;
}
答案 1 :(得分:0)
您可以在结构中使用位域,如下所示:
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