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 |
x86、ARM |
使用情境
在網路傳輸的協定中,統一使用 big endian,避免接收端的 CPU 需要額外判斷收到的資料需不需要轉換、也能減少傳輸封包大小(不需要另外儲存一個值來協助判斷)。
而在 CPU 運算中,little endian 發揮較好。
在做運算與硬體設計上,要判斷進位與借位(ex: 21 - 13,我們需要先知道 1 < 3 才會觸發借位)的傳遞、硬體實作邏輯也是從低位開始算,若採用 big endian,必須先「預測」低位的進位情況,這樣會使電路變得非常複雜,計算速度也不好。
留言
張貼留言