c语言一道问题求解
#include<stdio.h>unionss{shortinti;charc[2];};voidmain(){unionssx;x.c[0]=10;x.c[1]=1;...
#include<stdio.h>
union ss
{short int i;
char c[2];
};
void main()
{union ss x;
x.c[0]=10;
x.c[1]=1;
printf(“%d,x.i”)}
为什么答案是266啊,,求详细讲解,共用体不是很清楚 展开
union ss
{short int i;
char c[2];
};
void main()
{union ss x;
x.c[0]=10;
x.c[1]=1;
printf(“%d,x.i”)}
为什么答案是266啊,,求详细讲解,共用体不是很清楚 展开
1个回答
展开全部
共同体,顾名思义,就是所有成员都是共同的,大家占用同一块存储空间。而共同体占用的存储空间是所有元素中最大的。
题目中的共同体一共两个元素,shot int i和char c[2],每个元素都占用2个字节的存储空间,所以这个共同体union ss x,就占用2个字节。
后续代码中对x.c[0]和x.c[1]赋值,即给这2个字节的存储空间赋值。第一个字节的值是10,第二个字节的值是1。
由于x.i和x.c一起占用这2个字节的存储空间,那么x.i的第一个字节的值也是10,第二个字节的值也是1。这就是共同体的奇妙之处,给其中任何一个元素赋值,也就相当于给另一个元素赋值了。
一个字节的数值是256,即x.i的高位是1,即1*256,低位是10,所以x.i的值就是1*256+10=266
题目中的共同体一共两个元素,shot int i和char c[2],每个元素都占用2个字节的存储空间,所以这个共同体union ss x,就占用2个字节。
后续代码中对x.c[0]和x.c[1]赋值,即给这2个字节的存储空间赋值。第一个字节的值是10,第二个字节的值是1。
由于x.i和x.c一起占用这2个字节的存储空间,那么x.i的第一个字节的值也是10,第二个字节的值也是1。这就是共同体的奇妙之处,给其中任何一个元素赋值,也就相当于给另一个元素赋值了。
一个字节的数值是256,即x.i的高位是1,即1*256,低位是10,所以x.i的值就是1*256+10=266
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询