關于大端和小端,自己已經記了很多次了,可每次都忘,今天創新工場筆試,第一道題就是關于大端小端的知識,可惜,自己又忘了,怎么回事,說到底,是自己同時記大端和小端,導致容易混淆,現在只記小端了:小端,是數的高位存在內存地址的高位,小高高!

下面是從網上摘抄的一些東東,幫助理解和記憶,來自http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_14837.html:

端模式(Endian)的這個詞出自Jonathan Swift書寫的《格列佛游記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為Big Endian,從尖頭開始將雞蛋敲開的人被歸為Littile Endian。小人國的內戰就源于吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開。在計算機業Big Endian和Little Endian也幾乎引起一場戰爭。在計算機業界,Endian表示數據在存儲器中的存放順序。下文舉例說明在計算機中大小端模式的區別。

如果將一個32位的整數0x12345678存放到一個整型變量(int)中,這個整型變量采用大端或者小端模式在內存中的存儲由下表所示。為簡單起見,本書使用OP0表示一個32位數據的最高字節MSB(Most Significant Byte),使用OP3表示一個32位數據最低字節LSB(Least Significant Byte)。

地址偏移

大端模式

小端模式

0x00

12(OP0)

78(OP3)

0x01

34(OP1)

56(OP2)

0x02

56(OP2)

34(OP1)

0x03

78(OP3)

12(OP0)

如果將一個16位的整數0x1234存放到一個短整型變量(short)中。這個短整型變量在內存中的存儲在大小端模式由下表所示。

地址偏移

大端模式

小端模式

0x00

12(OP0)

34(OP1)

0x01

34(OP1)

12(OP0)

由上表所知,采用大小模式對數據進行存放的主要區別在于在存放的字節順序,大端方式將高位存放在低地址,小端方式將 高位存放在高地址。采用大端方式進行數據存放符合人類的正常思維,而采用小端方式進行數據存放利于計算機處理。到目前為止,采用大端或者小端進行數據存 放,其孰優孰劣也沒有定論。

有的處理器系統采用了小端方式進行數據存放,如Intel的奔騰。有的處理器系統采用了大端方式進行數據存放,如IBM半導體和Freescale的PowerPC處理器。不僅對于處理器,一些外設的設計中也存在著使用大端或者小端進行數據存放的選擇。

因此在一個處理器系統中,有可能存在大端和小端模式同時存在的現象。這一現象為系統的軟硬件設計帶來了不小的麻煩,這要求系統設計工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現在一個處理器的寄存器,指令集,系統總線等各個層次中。