怎麼編寫簡單程式判斷電腦是大端cpu還是小端cpu
阿新 • • 發佈:2019-02-12
電腦的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。
反之就是大端。