大端和小端的區別
一、大小端名稱起源
Endian這個詞來源於Jonathan Swift在1726年寫的諷刺小說"Gulliver's Travels"(《格利佛遊記》)。該小說在描述Gulliver暢遊小人國時碰到了如下的一個場景。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的爭論而引發了一場戰爭,並形成了兩支截然對立的隊伍:支援從Big-End剝開的人稱作Big-Endians,而支援從Little-End剝開的人就稱作Little-Endians。
這個故事其實是諷刺當時英國和法國之間持續的衝突。Danny Cohen,網路協議的開創者,第一次使用這兩個術語指代位元組順序,後來就被大家廣泛接受。
參考:
維基百科給出不一樣但類似的講解:位元組順序 wiki
二、大小端模式定義
1) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。(低低高高,低地址低位元組,高地址高位元組)
2) Big-Endian就是高位位元組排放在記憶體的低地址端,低位位元組排放在記憶體的高地址端。(低高高低,低地址高位元組,高地址低位元組)
舉一個例子,在32位數字0x12 34 56 78在記憶體中的表示形式為:
1)大端模式:
低地址 -------------------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:
低地址 -------------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
三、大小端出現原因
計算機系統是以位元組為單位的,每個地址單元都對應著一個位元組,一個位元組為8bit。但對於位數大於8位的處理器,如16位或32位的處理器,由於暫存器寬度大於一個位元組,那麼必然存在一個如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式的出現。
參考: