联盟成员作为垃圾价值

时间:2014-07-27 18:21:15

标签: c

#include <stdio.h>

int main()
{
    union a 
    {
        short int i;
        char ch[2];
    };

    union a u;

    u.ch[0]=3;
    u.ch[1]=2;

    printf("%d\n",u.ch[0]);
    printf("%d\n",u.ch[1]);
    printf("%d\n",u.i);
    //printf("%d %d %d",u.ch[0],u.ch[1],u.i);
    return 0;

}

给定的代码输出为3,2,515,它是如何515?

2 个答案:

答案 0 :(得分:3)

您的机器是小端,因此MSB为2,LSB为3

2 * 256 + 3 = 515

答案 1 :(得分:1)

由于您使用的是union,因此两个元素都存储在同一个地址中。因此,您可以使用值3和2编写ch个字符。

我认为您的计算机配有英特尔CPU计算机,其架构为小端,因此数据将从LSB存储到MSB

RAM表示:

your_adress    : 2
your_adress + 1: 3

那就是:

your_adress: 0x0203

现在将其转换为十进制,你得到

2*256 + 3 = 515