什么是大端,什么是小端
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
例如:
<strong><span style="font-size:18px;">int main()
{
int a = -2;
//10000000 00000000 00000000 00000010 原码
//11111111 11111111 11111111 11111101 符号位不变,其他位按位取反
//11111111 11111111 11111111 11111110 取反加1 补码
//ff ff ff fe
system("pause");
return 0;
}</span></strong>
如何写一个程序来判断数据在内存中是以大端方式存储还是小端方式存储的呢?
<strong><span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
int CheckSys()
{
int num = 1;
char* p = (char*)#//num是int整型,p是插入类型,所以需要强制类型转换才能赋值过去
if (*p == 1)
{
return 1;
}
else//*p != 1
{
return 0;
}
}
int CheckSys_union()
{
union UN
{
int num;
char p;
}un;
un.num = 1;
if (un.p == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
if (CheckSys() == 1)
{
cout<<"小端存储"<<endl;
}
else
{
cout<<"大端存储"<<endl;
}
if (CheckSys_union() == 1)
{
cout<<"小端存储"<<endl;
}
else
{
cout<<"大端存储"<<endl;
}
system("pause");
return 0;
}</span></strong>
CheckSys()