大小端解释以及如何使用程序判断IDE的存储模式

今天让我们来了解一下大小端的概念吧

什么是大小端?

大端(存储)模式:指的是数据的低位保存在内存的高地址处,而数据的高位则保存在内存的低地址处。

小端(存储)模式:指的是数据的低位保存在内存的低地址 处,而数据的高位 则保存在内存的高地址处。

我们使用画图来给大家解释一下

大端

我们来看看这个图,数据使用16进制的方式储存,当我们开辟出内存空间的地址之后,图中从左到右是低地址到高地址,我们按照大端存储方式存储数据的时候会将高位存储在低地址处,低位存储在高地址处,这样我们看数据由低地址到高地址就是和原数据一样的顺序。

小端

我们再来看看小端存储模式,与大端存储不一样的地方是,唉,大家发现存储的数据反过来了,对的,这就是小端存储模式,他将我们低位的数据存储在内存的低地址,高位的数据存储在内存的高地址,这样我们在内存中看数据就会产生数据是倒着的感觉。

vs2022中的存储模式

好啦,了解了大小端之后,大家是不是有点好奇我们使用的IDE是使用的哪种存储方式呢,我们打开vs2022,创造一个整型变量a来看看吧。

通过调试,我们调出a的内存,可以看到在内存中a的存储是01 00 00 00,它的低地址01 存储在了内存的低地址上,所以我们vs2022IDE环境中使用的是小端存储方式。

内存改为一列就可以更清晰的看到,在地址0x00DEFE60中是01,0x00DEFE61中是00,01是数据的低位,存储在了低地址中,这样是不是就清晰明了了。

使用代码判断IDE的存储模式

现在我们尝试使用一个代码来判断我们的IDE环境是大端存储方式还是小端存储方式吧

代码展示

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int a = 1;
	char* p = (char*)&a;
	if (*p == 1)
	{
	    printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

代码解析

我们知道了大小端的概念之后就很容易写出判断大小端的代码了,我们首先定义一个变量a,之后我们只需要取内存中第一个字节来判断,如果内存中第一个字节是00,那么这个环境是大端存储方式,如果第一个字节是01,那么这个环境是小端存储方式。

我们如何在一个整型数据中准确找出他的第一个字节的数字呢,我们只需要将a强制转化成char类型就好,我们通过指针的方式,我们首先定义一个char类型的指针变量p,在指针p中存放char类型指针a的内容,就是将a的地址的内容传给*p,之后通过*p判断系统是大端存储还是小端存储。

当然还可以通过函数的方式来判断

代码展示

cpp 复制代码
int infer_sys()
{
	int a = 1;
		return *(char*)&a;
}
int main()
{
	int ret = infer_sys();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

代码解析

在这个代码中,我们使用函数的方式来判断系统是大端存储还是小端存储,我们直接来看到函数,之前我们了解到我们只需要找到整型变量a的第一个字节的内容就可以完成对程序大小端的判断,那么现在我们是不是可以直接找到变量a第一个字节的地址,之后对它进行解引用,那么这样我们也可以找到内存中a的第一个字节的值,之后来判断。

我们定义函数infer_sys,用来判断我们大小端,给函数一个返回值使用ret来接收,返回1,我们认为系统是小端存储,返回0,系统是大端存储。

那么我们这里函数的返回值就是int类型了,在定义变量a=1之后,我们只需要找到a内存中的第一个字节的内容,之后将存储内容返回就可以成功判断大小端了。

运行结果

与我们判断结果一样,我们使用的vs2022的存储方式是小端存储。

今天就到这里喽,继续加油加油!!

相关推荐
倔强的石头106几秒前
【C++指南】类和对象(九):内部类
开发语言·c++
鸽鸽程序猿1 分钟前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd1 分钟前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6175 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v10 分钟前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A1 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
云边有个稻草人1 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
忘梓.2 小时前
解锁动态规划的奥秘:从零到精通的创新思维解析(3)
算法·动态规划