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

何为大小端存储

举个例子
我们有下图中的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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值