C 語言筆記:little endian 與 big endian

電腦記憶體是以位元組(Byte)為單位儲存資料的,但多位元資料(例如 int、long)在記憶體中的儲存順序,會依不同系統而異。

 

儲存順序

big endian:高位元組存放在低位址 

little endian:低位元組存放在低位址,從人類角度來看像反著寫數字

直接用例子會比較容易理解,假設我們有個 12345678 的數字,在兩種儲存順序中如下:

Big   Endian: addr → [12] [34] [56] [78]
Little Endian: addr → [78] [56] [34] [12] 

 

比較: 

 

Big Endian

Little Endian

直覺性

高(符合人類閱讀順序)

低(反序)

處理數值運算

較複雜

較方便處理低位元組運算

常見架構

網路協定、部分 RISC

  x86ARM
(預設 Little Endian,但可切換)


使用情境

在網路傳輸的協定中,統一使用 big endian,避免接收端的 CPU 需要額外判斷收到的資料需不需要轉換、也能減少傳輸封包大小(不需要另外儲存一個值來協助判斷)。

 

而在 CPU 運算中,little endian 發揮較好。

在做運算與硬體設計上,要判斷進位與借位(ex: 21 - 13,我們需要先知道 1 < 3 才會觸發借位)的傳遞、硬體實作邏輯也是從低位開始算,若採用 big endian,必須先「預測」低位的進位情況,這樣會使電路變得非常複雜,計算速度也不好。

 

留言