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
展开
 我来答
百度网友5fbf19215
2008-09-24 · TA获得超过171个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:249万
展开全部
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'
百度网友deebd4e0e
2008-09-23 · TA获得超过1462个赞
知道小有建树答主
回答量:1163
采纳率:0%
帮助的人:1228万
展开全部
u里面放的是:
ox41426162
然后for里面把u按照char输出了,也就是char的
0x410x420x610x62
这个,我不太记得它们对应的char是多少
好像是
ABab吧
哦,这个是因为你的系统是小端机……所以int里面的东西是倒着放的……
也就是说,假设一个int所在位置的16进制表示是0x420x41的话,那么这个int的值是
0x41×128+0x42
刚才没考虑清楚……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式