在c語言中,常常會遇到判斷cpu大小端的問題,在很多的筆試面試中經常會出現類似的題目,網路程式設計中也會程序遇到類似的問題,此文做以總結。
1、那麼何為cpu的大端和小端呢?
大端: 指的是資料的高位元組存放在記憶體的低位址中,資料的低位元組存放在記憶體的高位址中;
小端: 指的是資料的高位元組存放在記憶體的高位址中,資料的低位元組存放在記憶體的低位址中;
2、如何用圖來說明?
例如,有乙個int型別變數,int a = 1,在32位系統上面,int占用4個位元組,所以將其轉換為二進位制和十六進製制顯示分別為:
二進位制: 00000000 00000000 00000000 00000001
十六進製制: 0x0000000000000001
我們取a的位址為:&a = 0x003ef980;
在記憶體中的分布如下圖:
如上圖所示:
(1)、資料的低位元組0x01存放在了記憶體的高位址0x003ef983上面,則此時是以大端形式在儲存資料;
(2)、資料的低位址0x01存放在了記憶體的低位址0x003ef980上面,則此時是以小端形式在儲存資料。
3、如何用程式來判斷當前主機是用什麼方式儲存資料的?
用程式來判斷的話,主要有兩種方式來判斷:
(1)、指標法
#include int main(void)
else
getchar();
return 0;
}
執行結果為:
(2)、聯合法
#include int main(void)
test;
test.a = 0x0102;
if (test.b[0] == 1)
else
getchar();
return 0;
}
執行結果為:
————————————華麗的風格線————————————————
qq群:西安c/c++開發者,誠邀您的加入
C語言大小端問題
一 概念 大端儲存 乙個數的低位位元組序的內容存放到高位址處,高位位元組序的內容存放在低位址處。小端儲存 乙個數的低位位元組序的內容存放到低位址處,高位位元組序的內容存放在高位址處。舉個例子 include include include intmain printf s n isbigendian...
《C語言深度剖析》 大小端模式判斷
大小端模式介紹 例如 int a 1 a 的值為1,其中變數a佔4個位元組.用16進製表示為0x00000001 四個位元組 16進製制,2位表示乙個位元組 如果是小端模式則記憶體儲存方式如下 低位址0100 0000 高位址如果是大端模式則記憶體儲存方式如下 低位址00 0000 01 高位址 總...
C語言 大小端的問題
在計算機中資料一般都先存在記憶體中,拿32位機來說 系統為記憶體的每乙個位置都分配了乙個位址.位址 從0x00000000開始到0xffffffff 也許你的記憶體沒這麼大 那麼對於小端 little endain 來說,資料0x12345678在記憶體中的映像就是這個樣子的 78 0x000000...