又是c语言里的
#include<stdio.h>unionpw{inti;charch[2];}a;main(){a.ch[0]=13;a.ch[1]=0;printf("%d\n",...
#include <stdio.h>
union pw
{ int i; char ch[2];
}a;
main()
{ a.ch[0]=13;
a.ch[1]=0;
printf("%d\n",a.i);
}
程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)______。
这个答案 是13,为什么?什么又 低字节 和 高字节 啊? 展开
union pw
{ int i; char ch[2];
}a;
main()
{ a.ch[0]=13;
a.ch[1]=0;
printf("%d\n",a.i);
}
程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)______。
这个答案 是13,为什么?什么又 低字节 和 高字节 啊? 展开
1个回答
展开全部
联合体数据类型,大小为占用空间最多的变量的大小,这里就int 和 char [2],现在int一般为4字节大小,所以a.i大小为4,a.ch大小为2,选最大的就是a的大小了.
即a的大小为4,如果我们把a在内存中的安排从高地址到地址依次表示为bit0,bit1,bit2,bit3,一般在电脑里数据都按从高地址往低地址存数据,而且还是先存低位的数据,这里假设a.i=0x789ACDEF,则bit0=0xEF,bit1=0xCD,bit2=0x9A,bit3=0x78,同样,a.ch[0]=bit0,a.ch[1]=bit1,所以如果a.ch[0]=13;a.ch[1]=0;则就等于是bit0=13,bit1=0,但bit2,bit3为多少是不确定,这里我们如假设bit2=bit3=0,则a.i就是等于13了.
当然也许这里的int就是2字节的,那么也就没有bit2和bit3了.结果就更是13了
=================
我在我电脑上把代码改成:
#include <stdio.h>
union pw
{ int i; char ch[2];
}a;
int
main()
{
a.i = 0x12345678;
a.ch[0]=13;
a.ch[1]=0;
printf("%x\n",a.i);
return 0;
}
运行结果是:
1234000d
Press any key to continue
也验证了如上说法.
对了,低字节就是放在低位的字节,同样,高字节就是放在高位的字节,在上面的解说中,字节从低到高依次是:bit0,bit1,bit2,bit3,高低不是看那个字节在内存中是放在高地址还是在低地址,而是看它是作为数据的高位还是低位.
即a的大小为4,如果我们把a在内存中的安排从高地址到地址依次表示为bit0,bit1,bit2,bit3,一般在电脑里数据都按从高地址往低地址存数据,而且还是先存低位的数据,这里假设a.i=0x789ACDEF,则bit0=0xEF,bit1=0xCD,bit2=0x9A,bit3=0x78,同样,a.ch[0]=bit0,a.ch[1]=bit1,所以如果a.ch[0]=13;a.ch[1]=0;则就等于是bit0=13,bit1=0,但bit2,bit3为多少是不确定,这里我们如假设bit2=bit3=0,则a.i就是等于13了.
当然也许这里的int就是2字节的,那么也就没有bit2和bit3了.结果就更是13了
=================
我在我电脑上把代码改成:
#include <stdio.h>
union pw
{ int i; char ch[2];
}a;
int
main()
{
a.i = 0x12345678;
a.ch[0]=13;
a.ch[1]=0;
printf("%x\n",a.i);
return 0;
}
运行结果是:
1234000d
Press any key to continue
也验证了如上说法.
对了,低字节就是放在低位的字节,同样,高字节就是放在高位的字节,在上面的解说中,字节从低到高依次是:bit0,bit1,bit2,bit3,高低不是看那个字节在内存中是放在高地址还是在低地址,而是看它是作为数据的高位还是低位.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询