数据在计算机中存储的时候,分为大端存储和小端存储,每个计算机的大小端存储都不同,为了了解自己的机器中的大小端类型,可以通过很多方法查看。这里我们主要讲解两种查看大小端的方法。
那么到底什么是大小端呢?
大端存储是 数据的低位存储在高地址处
小端存储是 数据的低位存储在低地址处
我个人在理解的时候,将大小端的存储理解为数据在存储的时候,可以分为从内存的 低到高 存储和从 高到低 存储,也可以理解为从内存的头部开始存储和从尾巴开始存储,这样就可以理解了吧。从头开始存储是小端存储,从尾巴开始存储是大端存储。
我们查看大小端存储的时候,可以通过编译器的内存监视功能进行查看,这是最简单的一种方法,也是我今天的第一种方法,
这里我们插入一段代码,然后再打开编译器的内存监视窗口,查看存储状况。
#include<stdio.h>
int main()
{
int a=1;
return 0;
}
从上面的两张图片中,可以看出我的这个机器是小端存储,因为a=1在内存中存储时是将1放在低地址处,所以显而易见是小端存储。
另一种查看大小端存储的的方式是通过union数据类型和数组的存储特点,进行大小端的查看。
#include<stdio.h>
int main()
{
union stduent
{
short a1;
char a2[2];
}stu;
stu.a1 = 1;
printf("%d\n", stu.a2[0]);
system("pause");
return 0;
}
结果是1,是小端存储,那么我来解释一下为什么会出现1,以及为什么小端存储时,会出现1。
数组在内存中的存储特点是从低地址开始存储,读取的时候也是从低到高。而我们在将 a1 赋值为1时,因为short 类型在存储的时候,是根据大小端进行存储,数据可能是低位存储在高地址处,或者低位存储在地址值存。当我们将联合体中一个成员修改后,也会影响到其他成员,根据这几个特点,我们读取数组的第一个元素,如果读取的结果是1,那么就是小端存储,如果是0,那就是大端存储。
以上便是机器大小端检测的两种方法,其实还有很多方法查看,但较为常用的也就这两种了,如果不懂我在文章中的意思,可以私信给我。