文章目录
大小端介绍
我们在VS中键入一段代码后,对定义的变量在内存中的存储进行观察。
int main()
{
int a = 10;
int b = -10;
return 0;
}
地址可以使用&+变量名进行搜索
我们可以发现按照逻辑a = 10,按照我们的思考逻辑应该是00 00 00 0a,b = -10则应该是ff ff ff f6(补码)然而结果却相反,那是因为变量在VS中采用了大端存储模式。接下来就着重介绍一下数据的两种存储模式,大端存储和小段存储。
1.大端存储模式
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
2.小端存储模式
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
为什么会有大小端存储模式?
为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
如图:
如果实在觉得有些混乱也可以理解为逆着放为小端存储模式,正着放为大端存储模式。
同样我们也可以通过代码来实现对大小端存储模式的判别。
#include <stdio.h>
int check_sys()
{
int i = 1;
return (*(char *)&i);
}
int main()