C语言,关于共同体和结构体,程序我能看懂,但是结果为什么是这样啊?

我认为u.x=19,u.c='Z',u.s.a=9,u.s.b=10;但是答案是u.x=100,u.c='d',u.s.a=100,u.s.b=100#include"s... 我认为u.x=19,u.c='Z',u.s.a=9,u.s.b=10;但是答案是u.x=100,u.c='d',u.s.a=100,u.s.b=100

#include "stdio.h"
main(){
union{int x;
char c;
struct{int a;int b;}s;
}u;
u.s.a=9;
u.s.b=10;
u.c=u.s.a*u.s.b;
u.x=u.s.a+u.s.b;
printf("u.x=%d u.c=%c\t",u.x,u.c);
printf("u.s.a=%d u.s.b=%d",u.s.a,u.s.b);
展开
 我来答
nsjj2009
2010-10-16
知道答主
回答量:34
采纳率:0%
帮助的人:20万
展开全部
共同体变量u大小为四个字节
00000000 00000000 00000000 00000000
u.s.a=9;u.s.b=10;/*这时成员s用效,s中的a和b分别占2个字节*/
所以:
00000000 00001010 00000000 00001001
u.c=u.s.a*u.s.b;/*这时成员c有效,c只占一个字节,最低位的一个字节*/
所以:
00000000 00001010 00000000 01011010
u.x=u.s.a+u.s.b;/*这时成员x有效,x占两个字节,最低位两个字节*/
所以最终四个字节:
00000000 00001010 00000000 01100100
结果应该是:u.x=100,u.c=d u.s.a=100,u.s.b=10
不知道有没有说清楚啊。。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式