高位元組與低位元組,高位址與低位址,大端模式與小端模式

2021-07-02 17:12:20 字數 1213 閱讀 7862

位元組順序是指佔記憶體多於乙個位元組型別的資料在記憶體中的存放順序,通常有小端、大端兩種位元組順序。

小端位元組序指低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址處;

大端位元組序是高位元組資料存放在低位址處,低位元組資料存放在高位址處。

高、低位元組

一般pc是低位元組序,如果按平時書寫習慣,從左到右是高位到地位的順序,則例如0x12345678,在記憶體中的情況是

3. 總結 

整數型別內部:低位址儲存低位,高位址儲存高位。 

區域性變數:先定義的高位址,後定義的低位址。 

類,結構體,陣列:先定義的低位址,後定義的高位址。 

陣列實際占用的空間,要比元素大,感覺上像是給陣列名本身乙個「指標型別」的空間,即4個位元組。

intel處理器  小端模式

tcp/ip       大端模式

1. 下面程式輸出是多少?

union u ; 

int main()

結果為266。對於整數型別,都是低位元組存低位,高位元組存高位,因此低位是10,高位是1,結果=1*256+10=266。

2. 下面不同變數之間位址大小關係

class test ; 

int main()

(size_t)&a > (size_t)&b > (size_t)&c > (size_t)&t.n > (size_t)&t.m = (size_t)t 

2293612   > 2293611  >  2293552  >  2293548     > 2293544      = 2293544 

a、b、c、t都是區域性變數,在棧上儲存,棧是從高位址到低位址,因此位址逐漸減小。結構體內部,先定義的位址小,後定義的位址大,這與類內的成員,陣列總的元素,都是類似的。 

此外,值得注意的是(size_t)&a-(size_t)&b=1,剛好是1個位元組,即b的大小。(size_t)& b-(size_t)&c=59,這是因為首先需要位元組對齊,補3個位元組,從2293611,補到2293608,從2293607到 2293552剩下的44個位元組是陣列占用,注意陣列只有10個元素是40個位元組,還有4個位元組應該是陣列名占用的,把陣列名看作乙個指標?或者是陣列名本身包含陣列長度的資訊,具體情況不是很清楚,不過int a[10]占用的空間是44個位元組,而10個int型別的變數占用40個位元組。t的位元組分配很簡單,沒有什麼了。 

總的來說,具體的位址,需要考慮「棧的高位址到低位址」和「位元組對齊」以及「陣列」這樣的特殊情況等等。

高位元組與低位元組,高位址與低位址,大端模式與小端模式

位元組順序是指佔記憶體多於乙個位元組型別的資料在記憶體中的存放順序,通常有小端 大端兩種位元組順序。小端位元組序指低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址處 大端位元組序是高位元組資料存放在低位址處,低位元組資料存放在高位址處。高 低位元組 一般pc是低位元組序,如果按平時書...

高位址 低位址 高位元組 低位元組 大端小端和儲存順序

參考部落格 一 高位址和低位址 二 高位元組低位元組 如int a 16777220,化為十六進製制是0x01 00 00 04則04屬於低位元組,01屬於高位元組 三 大小端模式 1 如果a在記憶體中的存放順序為下圖 即低位元組存放在高位址 則為大端模式 2 如果a在記憶體中的存放順序為下圖 即低...

西門子PLC中的高位址,低位元組如何理解?

首先分析md10這個32位雙子儲存器的組成 md拆分開來由mw10與mw12這兩個字組成。而mw10與mw12拆分開來由mb10,mb11,mb12,mb13。那麼md10這個32位暫存器資料位是如何排序的呢?m10.7 m10.6 m11.7 m11.6.m12.7 m12.6.m13.7 m13...