大小端存储--数据在内存中的存储方式

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大小端存储--数据在内存中的存储方式相关的知识,希望对你有一定的参考价值。

何为大小端存储

举个例子
我们有下图中的int a = 36;
写出了对应的16进制发现数据在内存中存储的方式跟我们预想的有点不一样
在这里插入图片描述
这就是涉及到大小端存储的概念
大端存储
指的是数据的低位存储到内存的高地址中,数据的高位保存到内存的低地址中。
小端存储
指的是数据的低位存储到内存的低地址中,数据的高位保存到内存的高地址中。

那我们可以得知在我的机器的Visual Stdio 2019中,十进制数字36对应十六进制0x00 00 00 24 实际上是小端存储的(内存从左往右由低地址到高地址)。

为什么有大小端存储之分

我们知道计算机内存地址单元是以字节为单位的。但是在C语言中,我们有1个字节的char,两个字节的unsigned short int ,四个字节int,八个字节的double等等。再加上不同位数的机器 32,64位的机器,寄存器宽度大于一个字节,那么必然存在着如何安排这么多字节的问题。于是就有了大小端存储

设计小程序判断大小端存储

法一:

#include<stdio.h>
int Check_sys()
{
	int i = 1;//0x00 00 00 01
	char* p = (char*)&i;//我们结合不同指针类型进行加减操作的所往后偏移的字节数不一样
	return *p;
}
int main()
{
	int ret = Check_sys();
	if (ret)
	{
		printf("小端存储");
	}
	else
		printf("大端存储");
	return 0;
}

法二:

#include<stdio.h>
int Check_sys()
{
	union 
	{
		int i;
		char c;
	}un;//匿名联合体,因为出函数就销毁所以我们可以使用
	un.i = 1;
	return un.c;
}
int main()
{
	int ret = Check_sys();
	if (ret)
	{
		printf("小端存储");
	}
	else
		printf("大端存储");
	return 0;
}

以上是关于大小端存储--数据在内存中的存储方式的主要内容,如果未能解决你的问题,请参考以下文章

深度剖析数据在内存中的存储之整形在内存中的存储以及大小端介绍

C语言%u%d打印的规则数据在内存中的存储及大小端存储模式

整型数据在内存中的存储

C语言进阶——数据在内存中的存储

C语言进阶——数据在内存中的存储

C语言进阶——数据在内存中的存储