【c语言共同体】一道题目,不会做,求解答。高分悬赏。谢谢

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]);

}
请问共用体里面存放的数据是不是都是 00111001 00111000?

其他我就不会做了。呜呜

int a[2]占8个字节.39 00 00 00    38 00 00 00

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-13
看这个写法上 应该指的16位机
所以 a[2] b c[4]占的都是4个字节的空间
就像你说的
存放的数据都是16进制的 0x39 0x38
但由于int占两个字节 所以在这个四字节空间中 存放的是
0x39 0x00 0x38 0x00(按照常见的EL存储)
这样 输出b的时候就是
380039
输出c[0]的时候 就是x039的对应字符 也就是字符
9本回答被提问者和网友采纳
第2个回答  推荐于2018-05-09
这个要考虑到大、小端序(与电脑、编译器等等有关)和字节数。
共用体里数据的排序可能是:00111001 00111000
也可能是:10011100 00011100(顺序反过来)
公用体的字节数 = 其中一个拥有最大字节数 数据的字节数
其他小于该字节数的数据 = 截短后最大字节数的数据。
第3个回答  2015-01-05
是的,但是printf输出要转换
相似回答