指点成金-最美分享吧

登录

大端存储和小端存储

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了大端存储和小端存储相关的知识,希望对你有一定的参考价值。

大端存储和小端存储

  • 1.大端模式
  • 2.小端模式
  • 3.如何判断现在的系统的大小端模式
  • 总结


1.大端模式

大端模式又叫大端存储,是指高数据存放在低地址,将低数据存放在高地址,地址从小向大增加,数据从高位向地位存放,我们以一个int类型的变量来作说明:

int main() int i = 256;return 0;

我们来看用一张图来表示一下:

我们都知道数据的存储都是在栈里进行的,并且是由栈底开始往栈顶存,也就是由高地址存向低地址,那么对于int类型的i,我们知道它所占的字节数是4,那么它里面的八位十六进制数字在大端模式下又是如何在这四个字节中存储的呢?

如图所示,高地址存储低数据,01相对于上面的两个00来说是低数据,把它存在接近栈底的高地址中,这就是大端存储。

2.小端模式

小端模式又叫小端存储,是指高数据存放在高地址,将低数据存放在低地址,地址从小向大增加,数据也从低位向高位存放,我们同样以一个int类型的变量来作说明:

int main() int i = 256;return 0;

同样的画出他的图像:

与大端存储不同,我们发现,01作为一个低数据,它存储在了一个相对来说更接近栈顶的低地址的位置,这种存储方式就叫小端存储。

3.如何判断现在的系统的大小端模式

其实大端存储和小端存储的判定方法也十分简单,我们只需要定义一个char类型的指针去指向这个数据的地址,然后再解引用这个指针,看看解引用出来的数据是多少就可以了,由于数据是从高地址向低地址存储的,所以我们只需要判断在高地址上的是低数据为还是高数据位就行了。代码如下:

int main() int i = 256;char* p = &i;printf("%d\\n", *p);printf("%d", *(p + 1));return 0;

我们查看程序的输出结果以及i所占的内存:


我们此时可以发现,满足我们的猜想,高数据位是存在了高地址的位置,低数据位的01存在了相对来说比较低的地址,也就是说我的计算机就是小端存储模式。


总结

以上就是我对大小端模式的认识和理解,如果有错误或者可以补充的地方,欢迎大佬联系我。

以上是关于大端存储和小端存储的主要内容,如果未能解决你的问题,请参考以下文章