重要程度的順序
假設我手上有 1234 元。
地球人的寫法是 1234元,
火星人的寫法卻是 4321元。
這兩種寫法代表的金額都相同,
只是差別在於 地球人將重要的位數寫在前面
而 火星人則將重要的位數寫在後面
什麼是重要的位數?
重要位元:最高有效位元 MSB (Most Significant Bit)
不重要位元:最低有效位元 LSB (Least Significant Bit)
以地球人角度而言,重要的是 1234元 前面的1、還是尾巴的4?
前面的1代表1000元,後面的4就只是4元。
少了1就差1000元。
所以1很重要,4很不重要。
位元組順序(Endianness)
剛剛的例子是以10進位的角度來看,一個數字就是一個單位(字元)。
現在則切換成位元組的方式(16進位),每兩個數字才是一個單位(字元)。
高位在前、高位在後?
高位在高、高位在低?
Big Endian:
大端序(大尾序),重要的數寫(高位)寫在前(記憶體位址低位)。
MSB在前,LSB在後。
地球人
人類直覺的方式
Little Endian:
小端序(小尾序),重要的數寫(高位)寫在後(記憶體位址高位)。
LSB在前,MSB在後。
火星人
電腦結構由低位開始計算效率較高
網路傳輸、通訊協議以及硬體架構上都會有位元組順序的問題,
到底先接重要的位元、還是先接不重要的位元?
JVM、TCP/IP協議 使用Big Endian
Intel x86、x64架構所使用Little Endian
位元組順序記號 (BOM: byte-order-mark)
BOM是用來標示Unicode的位元組順序,
BOM 通常會出現在文件或檔案的第一個字元,以告訴你接下來編碼是什麼、要怎麼解讀,左到右還是右到左。
其中的 UTF-8 只有一個單位,不存在位元組順序問題,
於是UTF-8的BOM記號可以出現也可以省略。
UTF-8: EF BB BF
UTF-16 Big Endian: FE FF
UTF-16 Little Endian: FF FE
UTF-32 Big Endian: 00 00 FE FF
UTF-32 Little Endian: FF FE 00 00
FE FF、FF FE 要怎麼記阿?每次都會搞混。
可以把FF想成最不重要的位元(LSB),
依序遞增...,
FE次重要,00是最重要的位元(MSB)
沒有留言:
張貼留言