電腦的cpu有兩種,大端和小端cpu。
大端cpu:
所謂的大端,是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;
小端:
所謂的小端,是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。
下面是判斷的程序:
#include <stdio.h>
union node
{
int num;
char ch;
};
void big_small(union node p)
{
p.num = 0x12345678;
if(p.ch == 0x78)
{
printf("It is small-endian.\n");
}
else
{
printf("It is big-endian.\n");
}
}
int main()
{
union node p;
big_small(p);
return 0;
}
在程序中我們定義了一個結構體node,其中包含了兩個類型的數據,分別爲int 型和char型。
程序運行時,內存給他們分配空間,int型分配4個字節,char型也分配4個字節,(原因上一個博客有寫),
在函數big_small中我們給結構體中的num對應空間存放數據,存放16進制數0x12345678.(12是高字節,78是低字節)。
如果是小端cpu,它會把高字節存放在高地址,低地址存放低字節。
大端cpu則相反。
所以存放完畢時我們執行語句if(p.ch == 0x78),因爲所有cpu都會從低地址讀取數據,
所以如果讀取的數據爲78,即說明該16進制數把78這個低字節數據存放在低地址中。所以可以判斷這是個小端cpu。
反之就是大端。