【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啊?
第一题完全不会做...
请给出详解。谢谢 展开
下面程序运行后的结果是_______。
#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啊?
第一题完全不会做...
请给出详解。谢谢 展开
3个回答
展开全部
首先 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
没办法 教材普遍落后是当前的现实 只能忍了
对于第一题
在这个共用体里面存的就是
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
追问
您能解释一下 高位 高地址 反着读的意思吗?
我们教材很简略,没介绍,老师讲的很快,没涉及到这方面内容,偏偏考试题库里有这样的题目?真是头都要大了。
展开全部
第一题,输出39,9
调试跟踪一下就明白了
首先要明白union怎么使用
s.b=0x39,s.c[0]=0x39=57(十进制)=9(57对应的ASCII码)
调试跟踪一下就明白了
首先要明白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个字节
追问
能解释一下高位 低位 的意思吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询