大端和小端的概念

时间:2018-04-24 16:52:04

标签: c++ c storage unions

在联合中,所有元素都指向相同的内存槽。因此,如果我们将int视为2个字节,则它将二进制值包含为00000001 00000000(256)。由于char的大小是1个字节,所以前半部分(1个字节)应该用00000001分配,后半部分应该用00000000分配。但是为什么下面的代码打印256 0 1而不是{{1} }?

256 1 0

1 个答案:

答案 0 :(得分:1)

你有一台小端*机器。

i的字节首先以低字节排列。

如果你有一台大端机器,预期的输出不会是" 256 1 0"除非sizeof(int)是2.我不认为你有一个16位处理器。在更可能的sizeof(int)的4中,您将得到" 256 0 0"的输出。试试这个程序:

#include<stdio.h>
int main()
{

    union a{
           int i;
           char ch[sizeof(int)];
           };

    union a u;
    u.i=256;
    printf("%d", u.i);
    for (int b = 0; b < sizeof(int); ++b)
        printf(",%d", (int)(unsigned char)(u.ch[b]));
    printf("\n");
    return 0;

}

当您的处理器将它们排出时,这将显示u.i的所有字节。

*假设您不在PDP上。您不想了解PDP。