请教一道C语言问题。。求大神指导下
union{u8buf;struct{u8S1_CH:1;u8S2_FLESH_RTN:1;u8S3_HEATER:1;u8S4_VALVE:1;u8S5_POR:1;u...
union
{
u8 buf;
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
}SW;
void main()
{
u16 sys_qty;
SW.buf=0x03;
printf("%d",SW.Bits.SYS_SET);
}
请问下这是怎么赋值的,地位在上吗?不是应该地位在下面吗?? 不理解啊,求指导。。 展开
{
u8 buf;
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
}SW;
void main()
{
u16 sys_qty;
SW.buf=0x03;
printf("%d",SW.Bits.SYS_SET);
}
请问下这是怎么赋值的,地位在上吗?不是应该地位在下面吗?? 不理解啊,求指导。。 展开
3个回答
展开全部
union
{
u8 buf;
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
}SW;
共用体,U8的buf和struct的Bits实际上指向同一数据
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
这个结构体比较高级,u8 S1_CH :1;冒号1,表示,字段S1_CH占据U8的一个位(Bit)从前往后算,u8 S2_FLESH_RTN :1;占据第二个,等等,u8 SYS_SET :2;占据最后两个。所以这个结构体的长度实际是1BYTE,使用上面的方式定义,就能够非常方便的访问某个字节BYTE的某个BIT了。
综上所述,其实SW类似寄存器,BUF是全部的内容,Bits则是分解开的。使用Union能够让同一个数据有两种不同的访问方式。
于是,SW.buf=0x03,实际上,把这个U8全部的BIT都赋值过了。依次是
S1_CH S2_FLESH_RTN S3_HEATER S4_VALVE
0 0 0 0
S5_POR S6_DEFMODE SYS_SET
0 0 11
{
u8 buf;
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
}SW;
共用体,U8的buf和struct的Bits实际上指向同一数据
struct
{
u8 S1_CH :1;
u8 S2_FLESH_RTN :1;
u8 S3_HEATER :1;
u8 S4_VALVE :1;
u8 S5_POR :1;
u8 S6_DEFMODE :1;
u8 SYS_SET :2;
}Bits;
这个结构体比较高级,u8 S1_CH :1;冒号1,表示,字段S1_CH占据U8的一个位(Bit)从前往后算,u8 S2_FLESH_RTN :1;占据第二个,等等,u8 SYS_SET :2;占据最后两个。所以这个结构体的长度实际是1BYTE,使用上面的方式定义,就能够非常方便的访问某个字节BYTE的某个BIT了。
综上所述,其实SW类似寄存器,BUF是全部的内容,Bits则是分解开的。使用Union能够让同一个数据有两种不同的访问方式。
于是,SW.buf=0x03,实际上,把这个U8全部的BIT都赋值过了。依次是
S1_CH S2_FLESH_RTN S3_HEATER S4_VALVE
0 0 0 0
S5_POR S6_DEFMODE SYS_SET
0 0 11
追问
你这么写是地位在下么
追答
是。
其他人回答的“大端”、“小端”,都说明不了这个Union,因为它只有一个字节长。。。
低位在后面,意思是,低BIT位在后面,LSB。而不是,低地址字节在后面。
一定要知道,这个Union只有一个字节长。。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询