C++的一道计算题

来源:百度知道 编辑:UC知道 时间:2024/06/10 18:58:56
union Mykey
{
char a[4];
int b;
};
union Mykey x;
如果x.b=513,则x.a[0],x.a[1],x.a[2],x.a[3]各为多少
如经过x.b=258,x.a[0]='0';运算,则x.b=?

希望能给个讲解,谢谢

如果x.b=513,则x.a[0],x.a[1],x.a[2],x.a[3]各为多少 ?
1 2 0 0(char所对应的ASC码值)
此时a[1]为b的高位,a[0]为b的低位,组合起来为10 00000001,刚好为513

如经过x.b=258,x.a[0]='0';运算,则x.b=?
304
x.b=258 --> a[1]=1
x.a[0]='0'(0的ASC码是48)
所以最终结果是:a[1]*256+a[0] = 256+48 =304

造成这样的结果都是因为union成员公用内存地址