1. 程式人生 > >怎麼編寫簡單程式判斷電腦是大端cpu還是小端cpu

怎麼編寫簡單程式判斷電腦是大端cpu還是小端cpu

電腦的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。

反之就是大端。