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
请说一下过程思路,谢谢 展开
#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
请说一下过程思路,谢谢 展开
4个回答
展开全部
高字节,低字节是相反的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这两道题都是大小端问题,另外注意,第一道题的数组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,则是小端...... 上面的程序还可以看出,数据寻址时,用的是低位字节的地址。
例如一个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,则是小端...... 上面的程序还可以看出,数据寻址时,用的是低位字节的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高低字节问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询