1. 程式人生 > >大端和小端的區別

大端和小端的區別

一、大小端名稱起源

       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位的處理器,由於暫存器寬度大於一個位元組,那麼必然存在一個如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式的出現。

參考: