計算機的大端模式和小端模式區別


計算機在存儲數據到內存的時候遵守大端模式和小端模式,也就是我們所說的大尾和小尾模式
大端(大尾):數據的高字節保存在內存的低地址
小端(小尾):數據的高字節保存在內存的高地址

下面是摘自百度百科,這個例子比較好理解

大端模式
所謂的大端模式(Big-endian),是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在大端模式下,前32位應該這樣讀: e6 84 6c 4e ( 假設int占4個字節)
記憶方法: 地址的增長順序與值的增長順序相同
小端模式
所謂的小端模式(Little-endian),是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在小端模式下,前32位應該這樣讀: 4e 6c 84 e6( 假設int占4個字節)
記憶方法: 地址的增長順序與值的增長順序相反

我這練習測試的就是在普通PC上,使用的x86架構,使用的是小端模式,

參考:
https://blog.csdn.net/chy555chy/article/details/51966160
https://blog.csdn.net/chennut0802/article/details/6544428

例子:

在C代碼中測試小端模式

下面是定義了一個變量,然后給其賦值了0x12345678

 

然后我們在VC 6.0編譯器下面進入調試模式,將定義的變量拖入到內存中,查看內存的數據即可恍然大悟

 

我們分析下,上圖中在我們看到的,內地地址0012FF78---->0012FFAC由上至下是從小到大,從低到高

當我們從左至右觀察,也發現內存編號0012FF78 開始從左向右往后走也是從小到大,分別依次是:0012FF78 ,0012FF79, 0012FF7A, 0012FF7B  這4個地址就是對應的CC CC CC CC

那么根據上面的分析,知道內存中的高低分布了,在我們寫C代碼的時候定義0x12345678的時候,其順序是高位-->低位,也就是從0x12開始是12是高位,后面是地位

所以在內存中的分布按照小端模式來存儲的話:高位放在高位,低位放在地位 ,從左到右:78 56 34 12


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM