嚴(yán)以律己,寬以待人. 三思而后行. GMail/GTalk: yanglinbo#google.com; MSN/Email: tx7do#yahoo.com.cn; QQ: 3 0 3 3 9 6 9 2 0 .
小端(高位存在高地址,低位存在低地址)\
用于指代字節(jié)順序,在網(wǎng)絡(luò)傳輸和計(jì)算機(jī)硬件使用,通常表示邏輯最小處理單元大于物理最小處理單元時(shí)邏輯單元與物理單元的映射方式。通常情況下無(wú)論是大端還是小端都是以字節(jié)(8bit)計(jì),在字節(jié)之內(nèi)都是以大端順序排列。但不排除以后隨著計(jì)算機(jī)的發(fā)展將這個(gè)數(shù)字?jǐn)U充。
字節(jié)排序
含義
Big-Endian
高位在前,低位在后。
Little-Endian
低位在前,高位在后
請(qǐng)看下面這個(gè)例子:如果我們將0x1234abcd寫(xiě)入到以0x0000開(kāi)始的內(nèi)存中,則結(jié)果為 big-endian little-endian0x0000 0x12 0xcd0x0001 0x34 0xab0x0002 0xab 0x340x0003 0xcd 0x12然后,假如需要從內(nèi)存中取32位整數(shù)0x1234abcd中的高16位整數(shù),就需要知道是不是big-endian,如果是,需要從0x0002地址中去取,如果是little-endian,則需要從0x0000中取。也即怎么存就怎么取。
在“小終結(jié)者”形式中,提取一個(gè),兩個(gè),四個(gè)或者更長(zhǎng)字節(jié)數(shù)據(jù)的匯編指令以與其他所有格式相同的方式進(jìn)行:首先在偏移地址為0的地方提取最低位的字節(jié),因?yàn)榈刂菲坪妥止?jié)數(shù)是一對(duì)一的關(guān)系,多重精度的數(shù)學(xué)函數(shù)就相對(duì)地容易寫(xiě)了。 在“大 終結(jié)者”的形式中,靠首先提取高位字節(jié),你總是可以由看看在偏移位置為0的字節(jié)來(lái)確定這個(gè)數(shù)字是正數(shù)還是負(fù)數(shù)。你不必知道這個(gè)數(shù)值有多長(zhǎng),或者你也不必過(guò)一些字節(jié)來(lái)看這個(gè)數(shù)值是否含有符號(hào)位。這個(gè)數(shù)值是以它們被打印出來(lái)的順序存放的,所以從二進(jìn)制到十進(jìn)制的函數(shù)特別有效。因而,對(duì)于不同要求的機(jī)器,在設(shè)計(jì)存取方式時(shí)就會(huì)不同。IBM 的370主機(jī),多數(shù)基于RISC計(jì)算機(jī),和Motorola的微處理器使用big-endian方法。TCP/IP也使用big-endian方法 (big-endian方法也叫做網(wǎng)絡(luò)編碼)。對(duì)于人來(lái)說(shuō)我們的語(yǔ)言都是從左到右的習(xí)慣方式。這看上去似乎被認(rèn)為是自然的存儲(chǔ)字符和數(shù)字方式-你同樣也希 望以同樣的方式出現(xiàn)在你面前。許多人因此也會(huì)認(rèn)為big-endian是流行的存儲(chǔ)方式,正如我們平時(shí)所讀到的。然而,Intel處理器 (CPUs)和DEC Alphas和至少一些在他們的平臺(tái)的其他程序都是little-endian的。對(duì)于little-endian有一個(gè)問(wèn)題,那就是如果你增加數(shù)字的 值,你可能在左邊增加數(shù)字(高位非指數(shù)函數(shù)需要更多的數(shù)字)。因此,經(jīng)常需要增加兩位數(shù)字并移動(dòng)存儲(chǔ)器里所有Big-endian順序的數(shù)字,把所有數(shù)向右移,這會(huì)增加計(jì)算機(jī)的工作量。不過(guò),使用little-endian的存儲(chǔ)器中不重要的字節(jié)可以存在它原來(lái)的位置,新的數(shù)可以存在它的右邊的高位地址 里。這就意味著計(jì)算機(jī)中的某些計(jì)算可以變得更加簡(jiǎn)單和快速。
posted on 2008-06-26 00:26 楊粼波 閱讀(1313) 評(píng)論(0) 編輯 收藏 引用
Powered by: C++博客 Copyright © 楊粼波