您的位置:首页 > 其它

大小端介绍

mxrrr_sunshine 2017-12-02 18:18 39 查看

什么是大端小端?

大端模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

小端模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中;

为什么有大端小端?

在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8个bit位。但在c语言中,除了8个bit位的char类型之外,还有16个bit位的short类型,32个bit位的long类型。由于寄存器宽度大于一个字节,那么必然存在一个如何将多字节安排的问题。因此就出现了大端小端存储模式。

我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

如何测试?

“`

//代码1

int cheak()

{

int a = 1;

return ((char )&a);

//取出整型变量a的地址强制类型转换为字符型再解引用

}

int main()

{

int b = cheak();

if(b == 1)

{

printf(“小端模式\n”);

}

else if(b == 0)

{

print
b2e9
f(“大端模式\n”);

}

return 0;

}

//代码2

int cheak()

{

union //共用体共享内存空间,当开辟内存空间时以字节多的为准

{

int i;

char c;

}un; //开辟了四个字节的内存空间

un.i = 1;

return un.c;

}

int main()

{

int b = cheak();

if(b == 1)

{

printf(“小端模式\n”);

}

else if(b == 0)

{

printf(“大端模式\n”);

}

return 0;

}

“`//代码1

int cheak()

{

int a = 1;

return ((char )&a);

//取出整型变量a的地址强制类型转换为字符型再解引用

}

int main()

{

int b = cheak();

if(b == 1)

{

printf(“小端模式\n”);

}

else if(b == 0)

{

printf(“大端模式\n”);

}

return 0;

}

//代码2

int cheak()

{

union //共用体共享内存空间,当开辟内存空间时以字节多的为准

{

int i;

char c;

}un; //开辟了四个字节的内存空间

un.i = 1;

return un.c;

}

int main()

{

int b = cheak();

if(b == 1)

{

printf(“小端模式\n”);

}

else if(b == 0)

{

printf(“大端模式\n”);

}

return 0;

}
标签: