java. 端序_c代码测试本机处理器的端序
1、端序簡介(維基百科):
端序(Endianness),又稱字節序、尾序。在計算機科學領域中,端序是指存放多字節數據的字節(byte)的順序,典型的情況是整數在內存中的存放方式和網絡傳輸的傳輸順序。Endianness有時候也可以用指位序(bit)。
對于單一的字節(a byte),大部分處理器以相同的順序處理位元(bit),因此單字節的存放方法和傳輸方式一般相同。
對于多字節數據,如整數(32位機中一般占4字節),在不同的處理器的存放方式主要有兩種,以內存中0x0A0B0C0D的存放方式為例,分別有以下幾種方式:
1)大端序(英:big-endian)或稱大尾序。
數據以8bit為單位:
地址增長方向??→
...
0x0A
0x0B
0x0C
0x0D
...
示例中,最高有效位(MSB, Most Significant Byte)是0x0A?存儲在最低的內存地址處。下一個字節0x0B存在后面的地址處。正類似于十六進制字節從左到右的閱讀順序。
數據以16bit為單位:
地址增長方向??→
...
0x0A0B
0x0C0D
...
最高的16bit單元0x0A0B存儲在低位。
2)小端序(英:little-endian)或稱小尾序。
數據以8bit為單位:
地址增長方向??→
...
0x0D
0x0C
0x0B
0x0A
...
最低有效位(LSB,Least Significant Byte)是0x0D?存儲在最低的內存地址處。后面字節依次存在后面的地址處。
數據以16bit為單位:
地址增長方向??→
...
0x0DOC
0x0BOA
...
最低的16bit單元0xOD0C存儲在低位。
3)混合序(英:middle-endian)具有更復雜的順序。
以PDP-11為例,0x0A0B0C0D被存儲為:
32bit在PDP-11的存儲方式
地址增長方向??→
...
0x0B
0x0A
0x0D
0x0C
...
可以看作最高的16bit位和低位以大端序存儲,但16bit內部以小端存儲。
2、代碼實現:
測試思想主要是應用c語言的指針,以浮點數125.5為例,浮點數的在內存的存儲方式可參看博文:
float型數據125.5轉換為標準浮點格式:0 10000101 11110110000000000000000
則在內存中存放方式為:
1)小端
00000000?? 低地址
00000000
11111011
01000010?? 高地址
2)大端
00000000?? 高地址
00000000
11111011
01000010?? 低地址
代碼如下:
#include
int main(int argc, char *argv[])
{
float a=125.5;
char *p=(char *)&a;
printf("%d ",*p);
printf("%d ",*(p+1));
printf("%d ",*(p+2));
printf("%d\n",*(p+3));
return 0;
}
如果是小端,則結果: 0 0 -5 66
如果是大端,則結果: 66 -5 0 0
另外,也可以用以下更加簡便的代碼測試:
int main()
{
unsigned int a=65;//A的ASCII碼為65
char *p=(char *)a;
printf("%c",a);
return 0;
}
如果輸出是A,則可判斷為小端序。
3、處理器體系(維基百科):
總結
以上是生活随笔為你收集整理的java. 端序_c代码测试本机处理器的端序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 志在成为行业新标杆 荣耀Magic5系列
- 下一篇: cultureinfo 类 java_S