请教这个联合体和结构体的结果是什么以及原因?

presadio 2005-05-17 06:03:57
union
{
struct
{
unsign s1:2
unsign s2:3
unsign s3:3
}s;
unsign char c;
}v;
v.c=200;
请问v.s.s3=?和原因。谢谢!
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
du51 2005-05-17
  • 打赏
  • 举报
回复
从左或是从右.不是一定的.因机器而异.
一般是从低向高.但是不一定.
yuanyou 2005-05-17
  • 打赏
  • 举报
回复
SaiRose(Learning......)
说的差不多了
200的2进制是 110 01 000 c
S.s3 S.s2 S.s1
astrophor 2005-05-17
  • 打赏
  • 举报
回复
#include <iostream.h>
union
{
struct S
{
unsigned int s1:2;
unsigned int s2:3;
unsigned int s3:3;
}s;
unsigned char c;
}v;
int main()
{

v.c=200;
cout<<v.s.s3<<endl;
return 0;
}
astrophor 2005-05-17
  • 打赏
  • 举报
回复
弄错了 
应该是前3个,v.s.s3=6
这个和它在内存中的放的有关
astrophor 2005-05-17
  • 打赏
  • 举报
回复
首先要理解联合的定义
200的2进制是11001000
unsign s1:2这表示s1占2个bit,而一个char是8bit
2+3+3=8
s3就应该是这8个bit的最后3个,也就是000
故v.s.s3=0
lucymary1982 2005-05-17
  • 打赏
  • 举报
回复
不好意思,说错了,应该是不可预测,


因为,用到了unsigned char c,这意味着strcut妹分配内存阿
lucymary1982 2005-05-17
  • 打赏
  • 举报
回复
那要看v的类型了,如果是全局或静态则为0,否则不可预料

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧