2个C语言题

1.有下列程序#include<stdio.h>main(){union{intk;chari[2];}*s,a;s=&a;s->i[0]=0x39;s->i[1]=0x... 1. 有下列程序

#include <stdio.h>
main()
{
union
{
int k;
char i[2];
}*s,a;
s=&a;
s->i[0]=0x39;s->i[1]=0x38;
printf("%x\n",s->k);
}
输出结果是(A)
A)3839 B)3938 C)380039 D)390038

(2)以下程序的运行结果是 。

#include <stdio.h>

main()

{

union

{

short int i[2];

long k;

char c[4];

} r,*s=&r;

s->i[0]=0x39;

s->i[1]=0x38;

printf("%lx\n",s->k);

}

A. 390038 B.380039 C. 3939 D. 3838

【答】B

请说一下过程思路,谢谢
展开
 我来答
来自美国认真的兔子
2010-07-29 · TA获得超过644个赞
知道小有建树答主
回答量:550
采纳率:100%
帮助的人:425万
展开全部
其实两个题都差不多,都是联合体的问题,
联合体内大小由最长字节的变量约定,对于第一个题联合体的大小就是2字节,
当对两个字符负值时,i[0]在低地址,i[1]在高地址,于是在联合体内存中的从高到低就出现了3839两个,这个位置也是变量k的所在位置,于是输出3839【左高右低】
第二题可类似的推出!只是38前面也应该有两个00的,没显示,呵呵
还有就是编译器可能会导致得不到上面的结果,请注意
ahaubit
2010-07-29 · TA获得超过1453个赞
知道小有建树答主
回答量:637
采纳率:0%
帮助的人:773万
展开全部
高字节,低字节是相反的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhanghepengarm
2010-07-29
知道答主
回答量:24
采纳率:0%
帮助的人:0
展开全部
这两道题都是大小端问题,另外注意,第一道题的数组i是char型的,第二道题的数组i是short int型的。
例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模 式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。 下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元
若x0=0x11,则是大端; 若x0=0x22,则是小端...... 上面的程序还可以看出,数据寻址时,用的是低位字节的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gao_kyle
2010-07-29 · TA获得超过236个赞
知道答主
回答量:212
采纳率:0%
帮助的人:0
展开全部
高低字节问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式