【c语言共用体】有三个类型差不错的题目我归纳了一下,我不会做,请大神教我一下。请给出详解。谢谢高分

1、下面程序运行后的结果是_______。#include"stdio.h"main(){union{inta[2];longb;charc[4];}s;s.a[0]=0... 1、
下面程序运行后的结果是_______。

#include"stdio.h"

main()

{ union { int a[2];

long b;

char c[4];

}s;

s.a[0]=0x39;

s.a[1]=0x38;

printf("%lx\n",s.b);

printf("%c\n",s.c[0]);

}

2、
#include<stdio.h>
void main()
{ union
{ int k;
char i[20];
}*s,a;
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n", s->k);
}

请问共用体里面存放的数据是不是都是 00111001 00111000?
第二题的int 型为什么不是3938而是3839啊?
第一题完全不会做...
请给出详解。谢谢
展开
 我来答
风若远去何人留
2015-01-05 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部
首先 int型占用2个字节 这个是一种约定 你教材的约定 事实上 现在已经很少见了 都是4个字节
没办法 教材普遍落后是当前的现实 只能忍了
对于第一题
在这个共用体里面存的就是
i[0] = 0x0039
i[1] = 0x0038
其次 计算机在存储的时候 有大端小端的说法,目前常用的intel芯片都是小端的 也就是高位存在高地址上 写出来看起来就是反的
在这四个字节中存的数据就是
0x39 0x00 0x38 0x00

在用b输出时,还得反着读 真实值是0x00380039 按照%lx输出 就是380039
c[0]就是0x39 输出字符就是字符'9' 它的ascii码是0x39

第二题类似了
在内存中存的是
0x39 0x38
这两个字节对应int 记住 反着读 于是就是
3839
追问
您能解释一下 高位 高地址 反着读的意思吗?
我们教材很简略,没介绍,老师讲的很快,没涉及到这方面内容,偏偏考试题库里有这样的题目?真是头都要大了。
fzp456
2015-01-05 · TA获得超过310个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:150万
展开全部
第一题,输出39,9
调试跟踪一下就明白了
首先要明白union怎么使用
s.b=0x39,s.c[0]=0x39=57(十进制)=9(57对应的ASCII码)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-05
展开全部
第二题的int 型为什么不是3938而是3839啊?
计算机的存储是高高低低,意思就是高位的数存在高的地址上,低的在低位。
39    38   00  00      int占4个字节 从后面往前读 38->39
i[0] i[1]               char 占1个字节
追问
能解释一下高位 低位 的意思吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式