資料在計算機中都是以二進位制形式存在的,二進位制數的最高為就是msb
,最低位就是lsb。
比如以0x00000001為例:變數都是占用空間上的,對於多位元組型別,有int、short、double等。以int型別變數為例,int型別佔四個位元組,也就是32位,每個位元組空間都有乙個確定的位址,平時我們定義乙個int型別的變數:它的二進位制:
00000000000000000000000000000001
| |msb lsb
msb:most significant bit (最高有效位),也就是最高位,最左側的bit.
lsb:least significant bit(最低有效位),也就是最低位,最右側的bit.
int a = 1;用乙個int型別的指標變數指向a:
int *p = &a;此時可以用printf函式列印出p的值,一般p的值會是乙個類似0xe3f4a451的16進製制數,既然每個位元組空間都有乙個獨立的位址,那為什麼這裡列印int型別的位址只有乙個呢?這裡的指標p是乙個int型別的指標變數,大小為個4個位元組,儲存的是a變數的位址,然而a變數的位址並不是指四個位元組的每個位元組的位址,而是這四個位元組的第乙個位元組的位址,用這個位址來代表變數a的位址。a佔四個位元組,每個位元組都有自己的位址,位址最小的為低位址位元組,位址最大的為高位址位元組。
三、大端模式和小端模式
以0x00000001為例:四、用指標方式判斷大小端模式0x00
0x00
0x00
0x00
它的二進位制:
00000000000000000000000000000001
| |msb lsb
#include int main(voidlinux下gcc編譯執行結果:)
else
return0;
}
五、總結
如果intel或amd cpu,基本都是小端序的。arm則不一定,有些是大端的,有些是小端的。51微控制器是大端序的。
新人才疏學淺,有錯的地方敬請指正!!
判斷大小端模式
學c語言時,了解過大小端模式,但是一直都每怎麼理解,對於網上查到的各種判斷大小端的程式也是看的一知半解。最近再次看到大小端這個問題時,終於感覺頓悟了。以下是我的理解,如有錯的地方請指出。大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中。小端模式,是指資料的高...
判斷系統大小端模式
端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endi...
如何判斷大小端模式?
大端模式就是低位元組儲存在高位址處而高位元組儲存在低位址處 小段模式就是低位元組儲存在低位址處而高位元組儲存在高位址處 根據這個特性,假設我們初始化了乙個int變數i為0x12345678,其位址為0x100,根據定義在小端模式下 0x100乙個位元組內的值為0x78,類推0x101 0x56,0x...