大小端模式

大端小端模式解析

大端模式:(big-endian)

是指数据的高字节保存在内存的低地址中,而数据的低字节保存类似把数据当初

字符串处理,例如字符串指针指向的时字符串的首地址,这与栈的生长方向无关。

小端模式:(little-endian)

指数据的高字节保存在内存的高地址中,这种存储模式将地址的高低和数据位权

(位权表示数制中每一固定位置对应的单位值,如10进制中,第一位的位权为1,

第二位的位权为10.)有效的结合起来,位权高的对应高地址.

下面我们看看如何确定我们的编译器是大端还是小端模式。

#include<iostream>
using namespace std;
union pr{//创造一个联合数据结构

	char a1;
	int b;
};
int main()
{//这是第一种方法
	cout << sizeof(pr) << endl;//得到这个数据结构占据4个字节
	pr a;
	a.b = 1;
	cout << static_cast<int> (a.a1) << endl;;//使用cout需要强制转换
	printf("%d\n", a.a1);//打印为1则证明我这里是大端
	//下面是第二种方法
	pr a2;
	a2.b = 1;
	printf("%d", *(char *)&a2.b);//这里是利用int所占的四个字节可以转换成类似数组的形式,所以解引用后就是首地址。
	system("pause");
}

为什么会有大小端之分,主要在于在计算机系统中,我们是以自己为单位的,一个自己对应

8bit,但是除了8bit外,还有32bit,那么必然导致一个问题,如何去安排多个字节,因此

就导致了大小端问题。

总结

在计算机系统中,我们不但需要1个字节的数据类型,可能还需要4个字节的数据类型

那么就必然导致一个问题,多个字节的数据类型如何在内存中存储。

于是便有了大小端模式,大端模式好像我们平时的阅读习惯,从高位权对应低内存地址

小端模式则是高位权对应高地址。而如何判断我们的编译器是大端模式还是小端模式,那么

我们应该应该想到我们需要一块多字节的内存,并且我们利用了union这种数据结构,因为这种数据

结构是共享内存地址的,我们就可以利用char 和int就可以轻易的判断出我们的环境是小端还是大端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值