標籤: 公衆號文章編程
對於咱們這些碼農來講,內存至關於由若干個連續的格子組成,畫個圖就是這樣:bash
如圖所示的內存結構一共由n
個連續的格子組成,每一個格子能夠存儲一個字節的數據(1字節 = 8個位)。每一個格子都有它惟一的編號,稱之爲內存地址
。那麼:網絡
若是咱們的計算機是32位的話,理論上能夠訪問的內存格子個數就是2³²(也就是4GB),相應的內存地址範圍就是:0 ~ 2³² - 1
。spa
若是咱們的計算機是64位的話,理論上能夠訪問的內存格子個數就是2⁶⁴(這是一個很大很大的數),相應的內存地址範圍就是:0 ~ 2⁶⁴ - 1
。設計
咱們知道計算機中使用二進制來表示數據,不過二進制對人類來講太不友好,將它們轉換成十六進制來看更舒服一些,比方說對於下邊這個由4個字節組成的二進制數據(字節之間沒有空格,只是爲你們看起來美觀我才加了空格):code
00010010 00110100 01010110 01111000
複製代碼
二進制字節00010010
能夠被轉換成十六進制0x12
,二進制字節00110100
能夠被轉換成十六進制0x34
,二進制字節01010110
能夠被轉換成十六進制0x56
,二進制字節01111000
能夠被轉換成十六進制0x78
。因此整個數字轉爲十六進制數據就是:cdn
0x12345678
複製代碼
其中:blog
字節0x12
在左邊,表明着1 × 16⁷ + 2 × 16⁶
,這個0x12
字節佔的權重比較大。內存
字節0x34
表明着3 × 16⁵ + 4 × 16⁴
,這個字節佔的權重其次。it
接着是字節0x56
,表明着5 × 16³ + 6 × 16²
,這個字節佔的權重再次。
最後是字節0x78
,表明着7 × 16¹ + 8 × 16⁰
,這個0x78
字節佔的權重是最小的。
咱們通常是使用高級語言來編程的(區別於機器語言或者彙編語言),高級語言裏有一種類型
的概念,有的類型的數據要佔用連續的幾個內存格子。比方說某種語言裏有一種稱之爲int
的類型,該類型須要佔用4個字節的大小。若是說咱們想在高級語言裏將下邊的這個數(十六進制)設置成int
類型:
0x12345678
複製代碼
那這個數據該以怎樣的方式塞到內存格子中呢?是該把高權重的字節放到低地址中,仍是把高權重的字節放到高地址中呢?這其實和咱們吃雞蛋時應該先從大頭剝雞蛋皮仍是先從小頭剝雞蛋皮更好一點的問題差很少,其實沒啥不同。不過最開始設計計算機的大叔們因爲事先沒商量好,形成了這樣的後果:
有的人把高權重的字節放到了低地址中,人們把這樣表示多字節數據的方式稱之爲大端法
:
有的人把高權重的字節放到了高地址中,人們把這樣表示多字節數據的方式稱之爲小端法
:
因爲最初你們沒有商量好,致使對於多字節數據在不一樣的機器上採用不一樣的表示方法,這對於程序的可移植性形成了影響。另外,現代社會中網絡成了不可或缺的一部分,當將某個多字節數據從一個使用大端法表示的機器中發送到一個使用小端法表示的機器中時,便會形成錯誤,因而設計網絡的大叔規定,數據在網絡上進行傳輸時,必須統一採用大端法進行傳輸,那麼對於使用小端法的機器而言,就得多費一茬手續,再轉一下唄~
寫文章挺累的,有時候你以爲閱讀挺流暢的,那實際上是背後無數次修改的結果。若是你以爲不錯請幫忙轉發一下,萬分感謝~ 這裏是個人公衆號「咱們都是小青蛙」,裏邊有更多技術乾貨,時不時扯一下犢子,歡迎關注: