国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

大端小端格式詳解

2019-11-08 02:46:35
字體:
來源:轉載
供稿:網友

1. 什么是大端,什么是小端:

    所謂的大端模式,是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地址中;

    所謂的小端模式,是指數據的低位保存在內存的低地址中,而數據的高位保存在內存的高地址中。

2.為什么會有大小端:

    為什么會有大小端模式之分呢?這是因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節,那么必然存在著一個如果將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。例如一個16bit的short型x,在內存中的地址為0x0010,x的值為0x1122,那么0x11為高字節,0x22為低字節。對于大端模式,就將0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,剛好相反。我們常用的X86結構是小端模式,而KEIL C51則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬件來選擇是大端模式還是小端模式。

3.大小端在內存中的存放方式舉例:

    例如,16bit寬的數0x1234在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:

內存地址

0x4000

0x4001

存放內容

0x34

0x12

而在Big-endian模式CPU內存中的存放方式則為:

內存地址

0x4000

0x4001

存放內容

0x12

0x34

 

    32bit寬的數0x12345678在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:

內存地址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12

而在Big-endian模式CPU內存中的存放方式則為:

內存地址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

 

4.如何測試編譯器是大端還是小端:

下面這段代碼可以用來測試一下你的編譯器是大端模式還是小端模式:

#include<stdio.h>

 

int main()

{

    short int x;

    char x0,x1;

    x=0x1122;

    x0=((char *)&x)[0];  //低地址單元

    x1=((char *)&x)[1];  //高地址單元

    PRintf("x0=0x%x,x1=0x%x",x0,x1);// 若x0=0x11,則是大端; 若x0=0x22,則是小端......

    return 0;

}

以下是我在dev C++里面運行的結果,從結果來看,dev C++用的是小端模式;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰来县| 思茅市| 乌拉特前旗| 容城县| 景泰县| 荃湾区| 屏山县| 华容县| 通城县| 横峰县| 东港市| 盐边县| 鄱阳县| 瓮安县| 临沧市| 金山区| 洛阳市| 邵东县| 枣强县| 沈阳市| 萝北县| 开江县| 杂多县| 龙江县| 北流市| 江永县| 锡林郭勒盟| 勐海县| 崇明县| 五寨县| 阳高县| 崇礼县| 白朗县| 阿合奇县| 巴林左旗| 广灵县| 宁乡县| 阿拉善盟| 德安县| 巴彦县| 新竹市|