求大神瞥一段关于联合体的代码

求大神看一段关于联合体的代码
#include <stdio.h>
union
{
  int i;
  char x[2];
}a;

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


输出的结果为什么是266   求大神详解  最好也说联合体的内存情况 谢谢

------解决方案--------------------
int为四个字节,char为一个字节,x[0] = 0x0a;x[1] = 0x01;这两个字符填充到了int后两个字节上,即为0x0000010a;所以int i = 266了
------解决方案--------------------
int i是8个字节,char x[2]是2个字节,在小端CPU模式下,联合是从低字节开始对齐。

字节  1  2  3  4  5  6  7  8
-----------------------------
  i  0  0  0  0  0  0  1  10
  x                    1  10

i对齐x的低两个字节,所以i = (1 * 256) + 10 = 266