大小端介绍,你知道常用的VS2019内存中字节序存储的顺序吗?

本文介绍了计算机中字节序的概念,包括大端和小端存储模式的定义,并通过实例解释了这两种存储方式。文章还提供了检测当前系统字节序的方法,通过查看内存中整数的存储顺序来判断是大端还是小端。最后,作者展示了在VS2019编译器下如何进行字节序检测,并得出该编译器采用小端存储的结论。
摘要由CSDN通过智能技术生成

目录

一、引入大小端

二、什么是大小端?

三、为什么会有大端和小端?

四、测试当前机器的字节序


一、引入大小端

在我们经常使用的VS2019编译器使用过程过,我们经常会查看变量的内存

例如

int main()
{
	int a = 10;
	int b = -10;

	return 0;
}

 内存: 0x00 00 00 0a

我们观察编译器中的字节序

 内存:0xff ff ff f6

编译器中的字节序:

我们再看一个:

int main()
{
	int a = 0x11223344;

	return 0;
}

 

我们发现编译器中的存储方式与我们写出来的地址存储的顺序相反,怎么解释这种现象呢?我们就引入了大小端存储。

二、什么是大小端?

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

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

 我们其实可以知道,超过一个字节序就会有排放的顺序问题。

 错乱的顺序我们不好处理,所以就只剩下了正着存储和倒着存储。

因此我们定义:

通俗来说:

 

三、为什么会有大端和小端?

为什么会有大小端模式之分呢?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

四、测试当前机器的字节序

我们知道存储方式无非大端存储和小端存储两种方式

 因此我们可以用1来进行举例,我们知道1在内存中

无非一下两种存储方式

 因此我们可以发现,我们可以通过第一个字节来进行判断,如果是1,则是小端存储;如果是0则是大端存储。

代码实现:

int main()
{
	int a = 1;
	char* p =(char*) &a;//int*
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");

	}
	return 0;
}

 

 我们能够发现Vs2019是小端存储。

我们可以将代码进行优化:

int check_sys()
{
	int a = 1;
	char* p = (char*)&a;
	/*if (1 == *p)
		return 1;
	else
		return 0;*/
	/*return *p;*/
	return *(char*)&a;
}

int main()
{
	int ret = check_sys();//返回1是小端,返回0是大端
	if (1 == ret)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

我们也可以直接看内存:

 

 我们发现是倒着存,所以推断出是小端。

结论:通过本篇博客的总结,我们知道了当前编译器是大端存储还是小端存储,对我们以后的学习分析过程也会有很大的帮助。

如果你还不知道你经常使用的编译器是怎样的存储方式。小伙伴们快测试起来吧~

最后,大家觉得本篇文章对你有所帮助的话,点赞收藏+关注哦~ 

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白又菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值