c语言位域结构体联合类型混用,:联合体中包涵结构体结构体中包涵位域的东东 整蒙了...

typedef unsigned int word;

typedef union{

unsigned int word;

struct {

word flag0:1;

word flag1:1;

word flag2:1;

word flag3:1;

word flag4:1;

word flag5:1;

word flag6:1;

word flag7:1;

word flag8:1;

word flag9:1;

word flag10:1;

word flag11:1;

word flag12:1;

word flag13:1;

word flag14:1;

word flag15:1;

}Bit;

}UVFLAG;

extern UVFLAG uvflag;

疑问1:

例如

uvflag.Bit.flag3=1;

uvflag.word的值是多少呀?

例如

uvflag.Bit.flag3=1;

uvflag.Bit.flag11=1;

uvflag.word的值是多少呀?

真的是不懂,typedef unsigned int word;还有这条语句和unsigned int word;不是重复了吗?

解决方案

4

4

关于位段,,,,位顺序由 实现定义

例如

typedef unsigned char uchar;

union{

uchar uc;

struct {

uchar  b0:1;

uchar  b1:1;

uchar  b2:1;

uchar  b3:1;

uchar  b4:1;

uchar  b5:1;

uchar  b6:1;

uchar  b7:1;

}pos;

struct {

uchar  b7:1;

uchar  b6:1;

uchar  b5:1;

uchar  b4:1;

uchar  b3:1;

uchar  b2:1;

uchar  b1:1;

uchar  b0:1;

}rev;

}flag;

flag.uc=0;

flag.pos.b0=1;===> flag.uc =0x80,或 0x01 不同实现,结果不同

flag.uc=0;

flag.rev.b0=1;===> flag.uc =0x01,或 0x80 不同实现,结果不同

这个联合体的情况大抵如此

不过,你这里,定义类型,和变量名相同,

虽然是允许的,确实是坑人的

同一个标志符,有两种不同的含义

他们的心理距离是0

我们从心理上,不倾向于分辨他们

这是跟本人作对的做法

4

仅供参考:

#include 

#include 

char buf[17];

union U {

unsigned short int aa;

struct {

unsigned int bb:7;//(bit 0-6)

unsigned int cc:6;//(bit 7-12)

unsigned int dd:3;//(bit 13-15)

};

} u;

void main() {

//bbbbbbbbbbbbbbbb

//iiiiiiiiiiiiiiii

//tttttttttttttttt

//111111

//5432109876543210

//::::::::::::::::

u.aa=0xE07F;//1110000001111111

printf("bb==%d,cc==%d,dd==%d\n",u.bb,u.cc,u.dd);

u.bb=0x41;

u.cc=0x21;//dddccccccbbbbbbb

u.dd=5;   //1011000011000001

printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2));

}

//bb==127,cc==0,dd==7

//aa==0xB0C1==1011000011000001(2)

8

word成员是unsigned int类型不是4个字节吗?你的是什么硬件平台,多少位的?

4

65c48dc74b9edda6781f91f6e96387a5.gif理解和讨论之前请先学会怎么样观察!

不要迷信书、考题、老师、回帖;

要迷信CPU、编译器、调试器、运行结果。

并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。

任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明:联合体中包涵结构体结构体中包涵位域的东东 整蒙了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值