一、情境
在进行内存调试窗口的查看时,是不是会有一种错觉,就是它存的数据与我们预期的都是颠倒的,比如:
这里的a就和我们预期的不是很相同。
二、大小端
大小端是计算机厂家根据自己的习惯制定的关于数据字节序的规则。
1.大端存储
大端存储是将高位数据存放在地址的低处,低位数据反之。
2.小端存储
小端存储是将低位数据存放在地址的低处,高位数据反之。
3.图解
三、大小端的判断
1.复杂版代码如下:
#include <stdio.h>
int SystemCheck()
{
// 1的低位是1,高位是0
int a = 1;
// *pa是从低地址处开始取数据
// 如果是0,那么低位放的就是0 -> 大端
// 如果是1,那么低位放的就是1 -> 小端
char* pa = (char*)&a;
if (*pa == 0)
{
printf("大端\n");
}
else
{
printf("小端\n");
}
}
int main()
{
int ret = SystemCheck();
return 0;
}
2.简洁版代码如下:
#include <stdio.h>
int SystemCheck()
{
// 1的低位是1,高位是0
int a = 1;
// *pa是从低地址处开始取数据
// 如果是0,那么低位放的就是0 -> 大端
// 如果是1,那么低位放的就是1 -> 小端
return*(char*)&a;
}
int main()
{
int ret = SystemCheck();
if (ret == 0)
{
printf("大端\n");
}
else
{
printf("小端\n");
}
return 0;
}
四、总结
小端存储的口诀:小小小。
第一个小:数据的低位
第二个小:地址的低位
第三个小:小端
连起来就是数据的低位放在地址的低位是小端存储。
x86架构基本都是小端存储,以此可以检验我们的结果是不是正确的。