参考文章:
http://blog.sina.com.cn/s/blog_79a076a101016hhf.html
http://blog.csdn.net/aaronin/article/details/7700771
http://www.cnblogs.com/daxu/archive/2012/08/14/2638278.html
什么是大端小端存储:(百度百科)
为什么要有大端小端存储:(百度百科)
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
先说几个前提:
存储器存储数据都是从低地址向高地址存储。
内存中数据是以字节为单位进行存储的,每个地址单元对应着一个字节(byte),一个字节为8位(bite)。
以32位CPU为例,要存储数据0x12345678,这里采用16进制表示法,就是以4位为一组,而一个字节有8位,所以2个16进制数就可以表示了(4X2)。
既然是从低地址向高地址存储:
数据总有个先后顺序,我们默认刚才0x12345678,我们知道是从右向左位数越来越高的。就好像我们平时的任意一个数2014也是从右向左位数越来越高的,只不过进制不同而已,注意这只是数据显示的一种表示方法,跟它的存储顺序无关。
既然以字节为单位,所以(0x12),( 0x34),(0x56),( 0x78)就无法分开,而且他们还是有序的要么就 0x12,0x34,0x56,0x78,要么就0x78,0x56,0x34,0x12。
关键来了,
大端存储:高字节存储在低地址,高位先存
小端存储:低字节存储在低地址,低位先存
所以我们知道了大小对应着高低,而高先就是大,低先就是小了。
图示: