小端或大端

#include  union Endian { int i; char c[sizeof(int)]; }; int main(int argc, char *argv[]) { union Endian e; ei = 1; printf("%d \n",&e.i); printf("%d,%d,\n",ec[0],&(ec[0])); printf("%d,%d",ec[sizeof(int)-1],&(ec[sizeof(int)-1])); } 

OUTPUT:

 1567599464 1,1567599464, 0,1567599467 

LSB存储在较低地址中,MSB存储在较高地址中。 这不应该是大端吗? 但我的系统配置显示它是一个小端架构。

你的系统绝对是little-endian 。它是big-endian ,代码如下:

 printf("%d,%d,\n",ec[0],&(ec[0])); 

将为第一个%d而不是1打印0 。 在little-endian 1中存储为

 00000001 00000000 00000000 00000000 ^ LSB ^Lower Address 

但在big-endian它存储为

 00000000 00000000 00000000 00000001 ^LSB ^Higher Address 

并且不要使用%d打印变量的地址,使用%p

对于小端,最低有效位存储在第一个字节中(具有最低地址)。

这就是你所看到的,所以似乎有理智;)

 00000001 (Hexadecimal: 32 bits) ^^ ^^ MS LS Byte Byte 

最低地址=> little-endian的最低有效字节。 整数从小端开始放入内存。 由此得名。

字节序

您将包含“1”(最低有效)的字节作为第一个元素(ec [0]),包含“0”的字节作为第二个元素(ec [1])。 这是litte endian,不是吗?

什么是Big endian以及什么是little endian你错了。 读这个

在我看来很好。 “little endian”(又名“正确的方式”:-)表示“先存储的低位字节”,这正是您的代码所显示的内容。 (顺便说一下,你应该使用“%p”来打印地址)。