联合题目

来源:百度知道 编辑:UC知道 时间:2024/05/19 20:19:23
#i nclude <stdio.h>
union
{
int i;
char x[2];
}a;

void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
为什么是266

联合体union 的存放顺序是所有成员都从低地址开始存放.

这里int i; 和char x[2];公用内存区,
a.x[0] = 10;
a.x[1] = 1;

这里需要把10和1转化为ASC2码,
那么内存里面分布就是a.x[0]:1010,a.x[1]:0001
union的内存为第一字节00001010,第2字节00000001,第三字节00000000,第4字节000000000。

那么int i低地址开始存放,那么int i = 第4字节第三字节第2字节第一字节
即000000000-000000000-000000001-00001010
= 十六进制0x10a 即十进制266

全文假设在32位操作系统。。。

你这个问题要问什么??

266= 256 + 10
= 1*256 + 1*10
= 1*2*2*2*2*2*2*2*2 + 1*10
= B1,0000,0000 + B0000,1010
= a.x[0] + a.x[1]
= i

ls正解

266= 256 + 10
= 1*256 + 1*10
= 1*2*2*2*2*2*2*2*2 + 1*10
= B1,0000,0000 + B0000,1010
= a.x[0] + a.x[1]
= i

1*256+10=266!很简单!