大端與小端模式_第1頁
大端與小端模式_第2頁
大端與小端模式_第3頁
大端與小端模式_第4頁
大端與小端模式_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、7/7 大端模式小端模式? 在C語言中除了8位的ar型之外,還有16位的hot型,32位的lon型(要看具體的編譯器),對于位數(shù)大于8位的處理器,例如16位或者3位的處理器,由于寄存器寬度大于一個字節(jié),那么必然存在著如何將多個字節(jié)安排的問題.因此就導(dǎo)致了大端存儲模式和小端存儲模式.大端模式:字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中。小端模式:與大端存儲模式相反,在小端存儲模式中,低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)。例如,16位寬的數(shù)0 x124在小端模式PU內(nèi)存中的存放方式(假設(shè)從地址0 x40開始存放)為: 內(nèi)存地址0 x4000 x00存放內(nèi)

2、容34012而在大端模式CPU內(nèi)存中的存放方式則為:內(nèi)存地址00000401存放內(nèi)容0 x120 x4 3位寬的數(shù)012345678在小端模式CPU內(nèi)存中的存放方式(假設(shè)從地址0 x4000開始存放)為:內(nèi)存地址x40000 x4001x420003存放內(nèi)容078x60 x30 x12 而在大端模式U內(nèi)存中的存放方式則為:內(nèi)存地址x00040010420 x40存放內(nèi)容0 x120340 x50 x8??? 我們常用的X86結(jié)構(gòu)是小端模式,而IL C5則為大端模式。很多的R,P都為小端模式.有些AR處理器還可以由硬件來選擇是大端模式還是小端模式。Note:采用大端方式進行數(shù)據(jù)存放符合人類的正常

3、思維,而采用小端方式進行數(shù)據(jù)存放利于計算機處理。(我的理解:小端模式在低字節(jié)就放一個低位)下面這段代碼可以用來測試一下你的編譯器是大端模式還是小端模式:t ain()hotin x;har x0,x1;x=0 x1122;x0*((har*); /低地址單元,或者((car)x);x1=*(ch*)x + 1);/高地址單元,或者((ha)&x)1;prinf(x0=%xnx=%xn,x0,x);若00 x1,則是大端; 若x0=x22,則是小端.大端(BigEdian)與小端(ittle Endi)詳解【大端(BigEnia)與小端(Ltl Endian)簡介】Bye Enian是指字節(jié)在內(nèi)

4、存中的組織,所以也稱它為Bye Orring,或yteOrd.?? 對于數(shù)據(jù)中跨越多個字節(jié)的對象, 我們必須為它建立這樣的約定:(1)它的地址是多少?(2) 它的字節(jié)在內(nèi)存中是如何組織的? 針對第一個問題,有這樣的解釋:??? 對于跨越多個字節(jié)的對象,一般它所占的字節(jié)都是連續(xù)的,它的地址等于它所占字節(jié)最低地址。(鏈表可能是個例外, 但鏈表的地址可看作鏈表頭的地址)。??? 比如: t , 它的地址為010. 那么它占據(jù)了內(nèi)存中的Ox10, 0101,002, 010這四個字節(jié)(2位系統(tǒng),所以int占用4個字節(jié)).?? 上面只是內(nèi)存字節(jié)組織的一種情況: 多字節(jié)對象在內(nèi)存中的組織有一般有兩種約定。

5、 考慮一個W位的整數(shù)。? 它的各位表達如下:Xw-,w2, . , X, ,它的??MSB(MstSignifiantBy,最高有效字節(jié))為Xw1, w2, . w-8;??S (Lest Sinificant yte, 最低有效字節(jié))為X,X,.,0。?? 其余的字節(jié)位于MB,LB之間。LSB和MB誰位于內(nèi)存的最低地址, 即誰代表該對象的地址?這就引出了大端(Bi Enia)與小端(Litte Ein)的問題。如果LSB在MSB前面, 既是低地址, 則該機器是小端; 反之則是大端。DEC (DgitalEquipmetCorpoato,現(xiàn)在是Compaq公司的一部分)和Inel的機器(X8平

6、臺)一般采用小端。IBM,Motrola(PowerPC), un的機器一般采用大端.當(dāng)然,這不代表所有情況.有的C即能工作于小端, 又能工作于大端, 比如ARM, la,摩托羅拉的PowerC。 具體情形參考處理器手冊.具體這類PU是大端還是小端,應(yīng)該和具體設(shè)置有關(guān)。(如,Pow C支持litleendia字節(jié)序,但在默認配置時是bigendia字節(jié)序)一般來說,大部分用戶的操作系統(tǒng)(如wnds,reesd,Liux)是Litl Eian的。少部分,如MAC OS,是ig Edia 的。所以說,ittle Endian還是Big Ena與操作系統(tǒng)和芯片類型都有關(guān)系。Lnux系統(tǒng)中,你可以在/

7、us/include/中(包括子目錄)查找字符串YRDE(或_BYT_ORER, _BYTE_ORDER),確定其值。YTE_RDER中文稱為字節(jié)序。這個值一般在enian.h或maineeian.h文件中可以找到,有時在fate。h中,不同的操作系統(tǒng)可能有所不同。對于一個數(shù)112使用Little Endian方式時,低字節(jié)存儲022,高字節(jié)存儲011而使用Bi Endin方式時, 低字節(jié)存儲011,高字節(jié)存儲22經(jīng)一網(wǎng)友指正,才知道,上面的描述,是不準確的。想了下,覺得如下描述可能更合適:使用Littedan方式存儲數(shù)據(jù)時,數(shù)據(jù)的LS相對最沒意義的數(shù)據(jù)位,存放在低地址位置,這里的LB也就是2

8、2了也即,低地址存儲02, 高地址存儲01而使用Big Edian方式存儲數(shù)據(jù)時,數(shù)據(jù)的SB最有意義的數(shù)據(jù)位,存放在低地址位置,這里的MS也就是11了.也即低地址存儲01, 高地址存儲022助記:1)所謂SB (sSinifcant B),名字很復(fù)雜,不知是否有人沒搞懂,反正我開始看到這個詞時候,就很糊涂,有點不完全理解.其實簡單說S就是,一個數(shù)字中,最重要的那位,舉例來說,12004,中文讀作,一萬兩千零四,那最高位的1,就表示了一萬,此處就稱作MSB,最有意義的位.2)一般常見的數(shù)據(jù)存儲,用文字寫出來的時候,其內(nèi)容書寫格式,多數(shù)是從低地址到高地址(更符合人類思維的原因)舉例,一個1進制數(shù)是

9、1 22 3, 而存放的位置是地址030 中存放地址001 中存放2地址2 中存放33連起來就寫成地址3000-0302中存放了數(shù)據(jù)12233而這種存放和表示方式,正好符合大端.解釋的有點亂,希望有人能看懂.如果還有哪里有誤,還請各位繼續(xù)指正謝謝.【用函數(shù)判斷系統(tǒng)是ig Endian還是Lte Endan】b Iig_ndn()/如果字節(jié)序為big-endian,返回tre;/反之為?? littledin,返回se??ungnedshot ts = 01122;?? f( (uniear)tes) = 011)???reurnRUE;else?? rturn LSE;/IBi_Edan()大

10、端模式與小端模式一、概念及詳解在各種體系的計算機中通常采用的字節(jié)存儲機制主要有兩種: bgna和ittleian,即大端模式和小端模式。 先回顧兩個關(guān)鍵詞,MSB和SB: SB:st Signifiant t-最高有效位SB:Least Siificat Bit -最低有效位 大端模式(iedin) bigndan:MB存放在最低端的地址上。 舉例,雙字節(jié)數(shù)0134以bg-ndan的方式存在起始地址00000200中:| at| addres|012 | 034 000001 在BigEndian中,對于bt序列中的序號編排方式如下(以雙字節(jié)數(shù)08A為例):it 0 1 3 4 5 6 7 |

11、 8 9 0 11 1 1314 5SB-SBv | 0 01 0 11 1 0 0 1 1 0+= 8B 8 A 小端模式(ittleedian) ltlendin:LS存放在最低端的地址上. 舉例,雙字節(jié)數(shù)0234以lite-endin的方式存在起始地址0020中:| aa ddess 34 012 00000200 在Littlnin中,對于bt序列中的序號編排和Edin剛好相反,其方式如下(以雙字節(jié)數(shù)08B8A為例):bit|15 14 13 12 11 0 8 7 65 43 2 1 0-MSB-LSBal |1 0 0 1 0 1 1 0 0 1 0|+-+= 8B A二、數(shù)組在大端小端情況下的存儲:以unsgn i vaue 1234578為例,分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論