C语言题目(看程序写结果)。要分析过程
#include<stdio.h>main(){union{charc[4];inti[2];}u;intm;u.i[0]=ox4142;u.i[1]=ox6162;fo...
#include <stdio.h>
main()
{
union
{
char c[4];
int i[2];
} u;
int m;
u.i[0]=ox4142;
u.i[1]=ox6162;
for (m=0;m<4;m++)
printf("%c",u.c[m]);
printf("\n");
}
现在还没有正确答案。
我只有答案,不理解。
答案是BAba 展开
main()
{
union
{
char c[4];
int i[2];
} u;
int m;
u.i[0]=ox4142;
u.i[1]=ox6162;
for (m=0;m<4;m++)
printf("%c",u.c[m]);
printf("\n");
}
现在还没有正确答案。
我只有答案,不理解。
答案是BAba 展开
2个回答
展开全部
union内部的数据是共享内存的。
随意 c和i 的二进制码是一样的。
u.i[0]=0x4142变成二进制码为 0100000101000010
u.i[1]=ox6162变成二进制码为 0110000101100010
char型占8位:所以c的四个字符的二进制码分别是:
01000001=65 01000010=66 01100001=97 01100010=98
ascii码为65 66 97 98的char型字符分别是ABab
所以结果是打印:
ABab
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八位。
打印结果跟电脑本身的硬件有关系了,对于高位在前的机器当然是打印ABab
对于高位在后的就会打印BAba了.下面是一个解析的例子:
对于0x4142, 二进制码为:0100001010000010
char型数组一次取八位,所以第一个字符为01000010为B,第二个为10000010为A
这样就得出当u.i[0]=ox4142; 时,
u.c[0] = 'B' u.c[1]='A'
随意 c和i 的二进制码是一样的。
u.i[0]=0x4142变成二进制码为 0100000101000010
u.i[1]=ox6162变成二进制码为 0110000101100010
char型占8位:所以c的四个字符的二进制码分别是:
01000001=65 01000010=66 01100001=97 01100010=98
ascii码为65 66 97 98的char型字符分别是ABab
所以结果是打印:
ABab
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八位。
打印结果跟电脑本身的硬件有关系了,对于高位在前的机器当然是打印ABab
对于高位在后的就会打印BAba了.下面是一个解析的例子:
对于0x4142, 二进制码为:0100001010000010
char型数组一次取八位,所以第一个字符为01000010为B,第二个为10000010为A
这样就得出当u.i[0]=ox4142; 时,
u.c[0] = 'B' u.c[1]='A'
展开全部
u里面放的是:
ox41426162
然后for里面把u按照char输出了,也就是char的
0x410x420x610x62
这个,我不太记得它们对应的char是多少
好像是
ABab吧
哦,这个是因为你的系统是小端机……所以int里面的东西是倒着放的……
也就是说,假设一个int所在位置的16进制表示是0x420x41的话,那么这个int的值是
0x41×128+0x42
刚才没考虑清楚……
ox41426162
然后for里面把u按照char输出了,也就是char的
0x410x420x610x62
这个,我不太记得它们对应的char是多少
好像是
ABab吧
哦,这个是因为你的系统是小端机……所以int里面的东西是倒着放的……
也就是说,假设一个int所在位置的16进制表示是0x420x41的话,那么这个int的值是
0x41×128+0x42
刚才没考虑清楚……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |