大端(Big Endian)、小端(Little Endian)
端模式(Endian)的這個詞出自Jonathan Swift書寫的《格列佛游記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為Big Endian,從尖頭開始將雞蛋敲開的人被歸為Littile Endian。小人國的內戰就源于吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開。在計算機業Big Endian和Little Endian也幾乎引起一場戰爭。在計算機業界,Endian表示數據在存儲器中的存放順序。下文舉例說明在計算機中大小端模式的區別。
如果將一個32位的整數0x12345678存放到一個整型變量(int)中,這個整型變量采用大端或者小端模式在內存中的存儲由下表所示。為簡單起見,本書使用OP0表示一個32位數據的最高字節MSB(Most Significant Byte),使用OP3表示一個32位數據最低字節LSB(Least Significant Byte)。
?
| 地址偏移 | 大端模式 | 小端模式 |
| 0x00 | 12(OP0) | 78(OP3) |
| 0x01 | 34(OP1) | 56(OP2) |
| 0x02 | 56(OP2) | 34(OP1) |
| 0x03 | 78(OP3) | 12(OP0) |
?
如果將一個16位的整數0x1234存放到一個短整型變量(short)中。這個短整型變量在內存中的存儲在大小端模式由下表所示。
?
| 地址偏移 | 大端模式 | 小端模式 |
| 0x00 | 12(OP0) | 34(OP1) |
| 0x01 | 34(OP1) | 12(OP0) |
?
由上表所知,采用大小模式對數據進行存放的主要區別在于在存放的字節順序,大端方式將高位存放在低地址,小端方式將低位存放在高地址。采用大端方式進行數據存放符合人類的正常思維,而采用小端方式進行數據存放利于計算機處理。到目前為止,采用大端或者小端進行數據存放,其孰優孰劣也沒有定論。
有的處理器系統采用了小端方式進行數據存放,如Intel的奔騰。有的處理器系統采用了大端方式進行數據存放,如IBM半導體和Freescale的PowerPC處理器。不僅對于處理器,一些外設的設計中也存在著使用大端或者小端進行數據存放的選擇。
因此在一個處理器系統中,有可能存在大端和小端模式同時存在的現象。這一現象為系統的軟硬件設計帶來了不小的麻煩,這要求系統設計工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現在一個處理器的寄存器,指令集,系統總線等各個層次中。
?
請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1
解答:
{
{
union w
{
int a;
char b;
} c;
c.a =1;
return(c.b ==1);
}
}
?
union的存放順序是所有成員都從低地址開始存放(0x0000為低地址,0xffff為高地址)
?轉自:http://hi.baidu.com/ilotus_y/blog/item/efca278f51bb72ff503d9243.html
轉載于:https://www.cnblogs.com/todsong/archive/2010/11/03/1868401.html
總結
以上是生活随笔為你收集整理的大端(Big Endian)、小端(Little Endian)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【谷歌】Google Chrome 浏览
- 下一篇: 葬身李刚儿子车轮下的漂亮女孩