大小端模式

2021-08-28 09:42:30 字數 1545 閱讀 2653

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

例如:

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

2018 = 2*1000 + 0*100 + 1*10 +8*1

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

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

例如:

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

仍然是位權大的數字是排在位權小的數字之前的。

因為4個bit位的二進位制數,剛好能夠表示15個十六進製制符號,而乙個位元組佔8bit位,所以計算機中用2個十六進製制數字表示乙個位元組。記憶體中是按位元組排列的,根據上節對十六進製制數字的位權分析。我們進而推演模擬到位元組順序。我們可以把乙個位元組想象成乙個數字。

以0x12345678這個4位元組資料舉例:假設位址從0x4000起,位址編號開始累加**。名稱值

值值值記憶體位址

0x4000

0x4001

0x4002

0x4003

資料0x12

0x34

0x56

0x78

顯然地,0x12位權最大,0x78位權最小。

這裡我避免使用高位址和低位址這樣的概念,避免混淆。

設定記憶體總是如上表從左到右(位址編號由小到大)填入位元組資料。

也就是說位權大的排列在位權小的位元組之前,稱之為大端模式。名稱值

值值值記憶體位址

0x4000

0x4001

0x4002

0x4003

資料0x78

0x56

0x34

0x12

顯然地,0x12位權最大,0x78位權最小。

設定記憶體總是如上表從左到右(位址編號由小到大)填入位元組資料。

也就是說位權小的排列在位權大的位元組之前,稱之為小端模式。

大端模式是按照數字的書寫順序進行儲存的,而小端模式是顛倒書寫順序進行儲存的。

有些人在解析大小端的時候,往往會加入高位址,低位址,位址高階,位址低端這樣的概念。但是位元組按大小端順序往記憶體中放,對於位址來說,我們應該談先後順序,而不是哪一端,很容易記憶混淆。我很不喜歡這樣的解讀方式。

note:當然以上是我個人的記憶方式,如果有不對的地方,歡迎舉反例批評。

大小端模式

偶 注意 大小端的高低位資料是按位址來計算的。如0x1001,10是高位位元組,01是低位位元組。char s abcd a是高位位元組 所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順...

大小端模式

所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...

大小端模式

端模式 endian 的這個詞出自jonathanswift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為bigendian,從尖頭開始將雞蛋敲開的人被歸為littileendian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endian ...