这道题的输出是什么呢?为何

这道题的输出是什么呢?为什么?
union
{
 int i;
 char x[2];
}a;


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

------解决方案--------------------

10转二进制 1010再左移1个字节(8位) 再转回十进制为256 
再加10 
所以为266

------解决方案--------------------
引用:

10转二进制 1010再左移1个字节(8位) 再转回十进制为256 
再加10 
所以为266


帮楼上补充一下,小端情况下是0x0000 010a
------解决方案--------------------
看内存嘛
赋值
char[0]内存
0x0a
char[1]内存
0x01

int内存就是:
0x00 00 01 0a
这就是266
------解决方案--------------------
关键是Union会共享空间,你给char数组赋值的时候,其实就等于是给int i赋值了。当然仅从i的角度来看,这个是无法预估的值,因为你是给char数组赋值,而不是i。
------解决方案--------------------
这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间

大小端应该和系统无关吧,是硬件决定的吧。

嗯cpu定的


administrator@ubuntu:~/Desktop/aoqianglin $ vi Test3.c 
administrator@ubuntu:~/Desktop/aoqianglin $ gcc -o Test3 Test3.c 
administrator@ubuntu:~/Desktop/aoqianglin $ ./Test3 
-1217265398    


就是把这个在linux下测试的,

这个还真不能这样说,-1217265398的16进制的64位值是FFFF FFFF B772010A。算32位的话,去掉前面的FFFF FFFF也就是B772 010A,你可以最后4位是 010A 和 你的设置是符合的。有问题的是前面的4位是B772,问题就在于你没给它指定值,所以他里面的值是无法保证的。你应该声明char[4],然后先全部清0,再赋值。
------解决方案--------------------
引用:
问下,大端小端,高字节,低字节,大尾端,小尾端,的对应关系

Quote: 引用:

Quote: 引用:

这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间

大小端应该和系统无关吧,是硬件决定的吧。

大端应该就是大尾端,是指:高位在低地址
小端应该就是小尾端,是指:尾位在低地址
如图:
这道题的输出是什么呢?为何