关于c语言共用体的问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 12:42:39
main()
{
union
{
char ch[2];
int d;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
为什么结果是21,43

楼上说的是,我第三次看到这个问题,再回答一遍.
联合体是共用存储空间。这里x.ch[1]=00000001,a.ch[0]=00001010(二进制),由于i是和他共用的,所以i=0000000100001101,i就是266
再举个例子,如果ch[0]=13,ch[1]=7,实际ch[1]=00000111,ch[0]=00001101,那i=0000011100001101,算一下i=1805,就这样就对了
只要了解数据在计算机内的存储和表示方法,这个问题就不难理解了.
本题中,s.d=0x4321,十六进制很方便,不用像上面10进制转换成二进制,也可以做,就是每个字符型占二位,整型占四位,那ch[0]就是i的低二位,ch[1]是高二位,结果自然是21,43