所看的关于计算机大小端问题最清楚的解答

大端和小端来自一个小故事: 模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。
在内存中,数据是以字节(8bit)存储的,当存储16bit的int或者32bit的long(与操作系统有关),就面临着大端   (Big-Endian)  存储还是小端   (Little-Endian)  存储的问题。下面解释一下大端存储和小端存储的概念。
大端存储:高字节存储在低地址中,即高位先存;
小端存储:低字节存储在高地址中,即低位先存。
其实这两个概念不难理解,但是比较容易记混。由于大端序和小端序都是从存储器的低地址开始向高地址存储数据,不同的是一个字数据中先存高字节还是先存低字节。可以记住这样一个口诀:“高大低小”。“高”是指高字节,“大”是指大端序,“低”是指低字节,“小”是指小端序,“高大低小”也即先存高字节为大端序,先存低字节为小端序。
举个例子说明这个问题:
位宽为32bit的CPU,要存储的字数据为0x12345678,起始地址为0x4000。
大端存储如下: 

 地址   0x4000   0x4001   0x4002   0x4003 
 内容   0x12   0x34   0x56  0x78
小端存储如下:

 地址   0x4000   0x4001   0x4002   0x4003 
 内容   0x78   0x56  0x34   0x12

一般地,Intel系列的CPU采用小端存储,KEIL C51则为大端存储。  同时,在网络传输中,网络协议需要指定网络字节顺序,TCP/IP协议中使用16位整数和32位整数 的高位先存模式,对应我们的大端模式。

你可能感兴趣的:(所看的关于计算机大小端问题最清楚的解答)