Java教程

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

本文主要是介绍大小端存储--数据在内存中的存储方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

大小端存储

  • 何为大小端存储
  • 为什么有大小端存储之分
  • 设计小程序判断大小端存储

何为大小端存储

举个例子
我们有下图中的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;
}
这篇关于大小端存储--数据在内存中的存储方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!