C中的联合值

时间:2014-07-26 09:11:13

标签: c unions

#include <stdio.h>
int main()
{  
    union a
    {
       int i;
       char ch[2];
    };
    union a u;
    u.ch[0] = 0;
    u.ch[1] = 2;
    u.ch[2] = 0;
    u.ch[3] = 0;
    printf("%d\n",u.i);   
    return 0;
}

在这个程序中,如果整数的大小是4个字节,那么输出将是512怎么样?我们将看到4个字节中的前两个字节将被00占用。那我为什么要把它作为输出呢?

2 个答案:

答案 0 :(得分:1)

我认为你发布的代码是错误的,你打算初始化int的其他两个字节,如下面的更正代码,因为否则你很少有机会得到{{ 1}}作为输出。

在这种情况下,由于大多数Intel机器都是little-endian,因此您将第三个最重要的字节设置为512,将每个其他字节设置为0.因为2,您得到{{1}作为输出。

2 * 256 = 512

答案 1 :(得分:0)

了解endianness。某些int内的字节顺序取决于处理器。