判斷系統CPU是大端還是小端

2021-07-04 11:15:29 字數 1502 閱讀 2601

所謂的大端小端就是cpu在儲存資料的時候是從高位址開始儲存還是低位址開始儲存。例如在sizeof(int) = 2的系統中,1 + (2 << 8)= 1 + 512 = 513,我們把這個值賦值給int ntemp = 1 + (2 << 8)。我們假定系統分配給變數ntemp的位址空間為:0x0000ff08到0x0000ff09,那麼0x0000ff08開始的8個位為第乙個位元組的儲存空間,0x0000ff09開始的8個位為第二個位元組的儲存空間。

如果cpu為大端,記憶體中的儲存分配則為:

0x0000ff08:00000010(二進位制) -> 2 (十進位制)

0x0000ff09:00000001(二進位制) -> 1 (十進位制)

如果cpu為小端,記憶體中的儲存分配則為:

0x0000ff08:00000001(二進位制) -> 1 (十進位制)

0x0000ff09:00000010(二進位制) -> 2 (十進位制)

那麼如何判斷系統cpu是大端還是小端呢???

我們可以利用c中的的共用體union和char型別,共用體的資料成員是共享儲存空間的,而char型別在任何系統中都是乙個位元組。

我們可以定義乙個共用體

union

;然後對共用體的sum進行賦值,只要判斷element各個元素的值就可以知道系統cpu為大端,還是小端。因為共同體是共享儲存的,我們這裡假定測試系統sizeof(int)為2,那麼element[0]的內容為sum儲存空間中的第乙個位元組的內容,element[1]的內容為sum儲存空間的第二個位元組的內容。如果cpu為小端則表示式(int)(element[0]) + ((int)elememt[1] << 8)的值將等於sum。如果cpu的大端則表示式(int)(element[1]) + ((int)elememt[0] << 8)的值將等於sum。

下面給出可移植的**來判斷系統的cpu是大端還是小端。

#include

#include

unionbigorsmall 

;boolcheckbigorsmall() 

intsum = 0; 

for(i = 0; i < nlen; ++i)      

for(i = 0; i < nlen; ++i) 

else

} strtemp[8] = 0; 

printf("%s(bin) -> %d(dec)\n", strtemp, bigorsmall.element[i]); 

}if(sum == bigorsmall.sum) 

else

}intmain()  

else

return0; 

如何判斷CPU是大端還是小端模式

如何判斷cpu是大端還是小端模式 2010 12 03 23 35 25 分類 c c 在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低...

如何判斷CPU是大端還是小端模式

在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高位位元組...

C語言判斷cpu是大端還是小端。

1.大端模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 小端模式相反 2.為什麼有大小端之分?因為在計算機系統中,儲存是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組 8bit。在c語言中除了8bit的char之外,還有16bit的short型,32b...