寫乙個C函式判斷處理器是大端還是

2021-06-18 23:08:55 字數 1990 閱讀 5958

首先我們介紹乙個聯合體的概念。

在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,在c語言中,被稱作「共用體」型別結構,簡稱共用體,也叫聯合體。

聯合體的特別之處

「聯合」與「結構」有一些相似之處。但兩者有本質上的不同。在結構中各成員有各自的記憶體空間,乙個結構

變數的總長度是各成員長度之和。而在「聯合」中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度。應該說明的是,這裡所謂的共享不是指把多個成員同時裝入乙個聯合變數內,而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。如前面介紹的「單位」變數,如定義為乙個可裝入「班級」或「教研室」的聯合後,就允許賦予整型值(班級)或字串(教研室)。要麼賦予整型值,要麼賦予字串,不能把兩者同時賦予它。聯合型別的定義和聯合變數的說明乙個聯合型別必須經過定義之後,才能把變數說明為該聯合型別。

big-endian是一種大值的一端(序列中更典型值)存在前面(在最小的儲存位址)的順序。little-endian是一種小值的一端(序列中較不典型的值)儲存在前的順序。

intel的微處理器一般是小端模式,ibm的370主機,多數基於risc計算機,和motorola的微處理器使用big-endian方法。tcp/ip也使用big-endian方法(因此big-endian方法也叫做網路編碼)。

c筆試題

(判斷大端小端模式) 試題1:請寫乙個c函式,若處理器是big_endian的,則返回0;若是little_endian的,則返回1。

解答:#include

int checkcpu()

c;c.a = 1;

return(c.b ==1);}

int main()

剖析:嵌入式系統開發者應該對little-endian和big-endian模式非常了解。採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,而big-endian模式對運算元的存放方式是從高位元組到低位元組。例如,16bit寬的數0x1234在little-endian模式cpu記憶體中的存放方式(假設從位址0x4000開始存放)為:

記憶體位址

0x4000

0x4001

存放內容

0x34

0x12

而在big-endian模式cpu記憶體中的存放方式則為:

記憶體位址

0x4000

0x4001

存放內容

0x12

0x34

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12

而在big-endian模式cpu記憶體中的存放方式則為:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

聯合體union的存放順序是所有成員都從低位址開始存放,面試者的解答利用該特性,輕鬆地獲得了cpu對記憶體採用little-endian還是big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是乙個天才的程式設計師。

另外個例子:

#include 

int main()

u;if(sizeof(short) == 2)

else if(u.c[0] == 2 && u.c[1] == 1)

return 0;}}

**至微博

**至微博

寫乙個函式判斷系統是大端還是小端

include union node int main 把int的每個位元組讀出來。要是第乙個位元組為0證明是大端模式 寫乙個函式判斷系統是大端還是小端。若處理器是big endian的,則返回0 若是little endian的,則返回1.大端格式 在這種格式中,字資料的高位元組儲存在低位址中,而...

寫乙個函式判斷儲存空間是大端還是小端

判斷儲存空間是大端還是小端 我們常用的x86結構都是小端模式,而大部分dsp,arm也是小端模式,不過有些arm是可以選擇大小端模式。所以對於上面的maxheight是應該以小端模式來存放,具體情況請看下面兩表。小端模式 大端模式 通過上面的 可以看出來大小端的不同,在這裡無法討論那種方式更好,個人...

M4 是乙個巨集處理器

m4的內容 m4 是乙個巨集處理器.將輸入拷貝到輸出,同時將巨集展開.巨集可以是內嵌的也可以是使用者定義的.除了可以展開巨集,m4還有一些內建的函式,用來引用檔案,執行unix命令,整數運算,文字操作,迴圈等.m4既可以作為編譯器的前端也可以單獨作為乙個巨集處理器.安裝下列程式 m4 簡短說明 m4...