1. 程式人生 > >大小端通俗理解

大小端通俗理解

1.大與小,說的是什麼 大與小,實際上說的是位權值,也就是說位元組順序問題,是由數學中,自然數的書寫模式的規律,擴充套件延伸類比而來的。

例如:        2018這個十進位制多位自然數的書寫,是從左到右的。        

2018 = 2*1000 + 0*100 + 1*10 +8*1 其中2這個數字,(從左到右是第1位)也叫千位,千位的位權是1000;在這個自然數中,千位的位值是(2*1000)2000;各位的位值相加,就是這個數實際所代表的數值。

從上面這個例子中,我們可以得出一個結論,以這種從左到右的自然數書寫方式為標準,面對多位數,位權大的數字是排在位權小的數字之前的。

2.十六進位制也符合這樣的規律

例如:       

 214(16進位制)這個數。逢16進一。        

0x214 = 2*(16^2) + 1*(16^1) + 4*(16^0) = 532(十進位制)。        

下列全是代表16進位制的數字,就不加0x符號說明了        (注意:十進位制中用符號“10”代表10;而十六進位制中用符號“10”代表16)        (注意:10最好讀成“一零”,而不要讀成“十”,避免跟十進位制混淆)        

 214 = 2*(10^2) + 1*(10^1) + 4*(10^0)         2A4 = 2*(10^2) + A*(10^1) + 4*(10^0) = 200 + A0 + 4 仍然是位權大的數字是排在位權小的數字之前的。

3.來看看大端模式 因為4個bit位的二進位制數,剛好能夠表示15個十六進位制符號,而一個位元組佔8bit位,所以計算機中用2個十六進位制數字表示一個位元組。記憶體中是按位元組排列的,根據上節對十六進位制數字的位權分析。我們進而推演類比到位元組順序。我們可以把一個位元組想象成一個數字。 以0x12345678這個4位元組資料舉例:假設地址從0x4000起,地址編號開始累加上漲。

名稱 值 值 值 值 記憶體地址 0x4000 0x4001 0x4002 0x4003 資料 0x12 0x34 0x56 0x78 顯然地,0x12位權最大,0x78位權最小。 這裡我避免使用高地址和低地址這樣的概念,避免混淆。 設定記憶體總是如上表從左到右(地址編號由小到大)填入位元組資料。 也就是說位權大的排列在位權小的位元組之前,稱之為大端模式。

4.

5.更通俗一點 大端模式是按照數字的書寫順序進行儲存的,而小端模式是顛倒書寫順序進行儲存的。 有些人在解析大小端的時候,往往會加入高地址,低地址,地址高階,地址低端這樣的概念。但是位元組按大小端順序往記憶體中放,對於地址來說,我們應該談先後順序,而不是哪一端,很容易記憶混淆。我很不喜歡這樣的解讀方式。 Note:當然以上是我個人的記憶方式,如果有不對的地方,歡迎舉反例批評。