说起大小端存储,大家一定很疑惑,这是什么东西,简单点说就是电脑在读机器语言的时候是先低位读,还是高位。如果这还不是很明了,那么我再举一个例子,对于32位操作系统,我们数据存储是32位的,数字1,在机器中存储的是0000....0001,前面31个0,后面一个1,那么你怎么能知道机器是先从高位读起,还是低位呢,有一个简单的方法,那就是你把数据的前8位截断不就可以了吗。一个int是4个字节,一个char是一个字节,用char去强制类型转换int型,就可以得到int数据类型的前八位了,是不是很神奇。
下面我写了一段测试代码:
#include<iostream>
using namespace std;
int main()
{
int arr[]={1,2,3,4,5};
int c=(int)&arr+1;
int a=*((long*)((int)&arr+1));
cout<<*((char*)((int)&arr+1)) <<endl;
system("pause");
return 0;
}
上面先定义一个数组,5个大小,第二行的c是什么意思呢取地址数组名+1就是原数组的地址向后偏移一个字节的意思,第三行的a是取四位,和int一样,这里就不管它了,下面输出引用c地址,就是读取c地址的内容,输出的结果是2的25次方,这就说明我自己的电脑是小端存储。这里再解释下小端存储吧,
小端存储(Little Endian)。字节或 半字节的最低位字节(Lowest Significant Bit,LSB)存放于内存最高位字节地址上。即最低地址存放的最低字节,
2在前面24个0,0010,1在电脑中是前面24个0,0001。用char去截断,就得到数组中1的那24个0和2中的第一个字节也就是0010,排列起来就是2的25次方。