请教一道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);
}
请问下这是怎么赋值的,地位在上吗?不是应该地位在下面吗?? 不理解啊,求指导。。
展开
 我来答
馄饨978
2013-04-29 · TA获得超过538个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:262万
展开全部
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
追问
你这么写是地位在下么
追答
是。

其他人回答的“大端”、“小端”,都说明不了这个Union,因为它只有一个字节长。。。

低位在后面,意思是,低BIT位在后面,LSB。而不是,低地址字节在后面。

一定要知道,这个Union只有一个字节长。。。。
冰骨
2013-04-29
知道答主
回答量:6
采纳率:100%
帮助的人:5.6万
展开全部
准确来讲,不同的计算机系统在数据排列上是不同的,分为大端和小端。小端排列低位在前高位在后,大端则相反。现在使用的计算机绝大多数都是小端排列,所以,默认的规则就是低位在上。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anan640925
2013-04-29 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1103万
展开全部
一般是低字节在前
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式