请问一个union 的有关问题

请教一个union 的问题union un{char str[4]short val}aa.val0a.str[0]256a.str[1]255a.str[2]25

请教一个union 的问题
union un{
  char str[4];
  short val;
  }a;
  a.val=0;
  a.str[0]=256;
  a.str[1]=255;
  a.str[2]=254;
  a.str[3]=253;

  printf("%d\n",a.val);

这个打印的结果是 -256 ,能给解释下么?



[解决办法]
这个很复杂么?小端机器上不就是0xff00么?
value不就是str的低两位么?
str[0]=256溢出截断实际为0
str[1]=255=0xff