首先大小端問題的**是由於作業系統中儲存是以位元組為單位儲存的,那麼大於乙個位元組的型別int、long等型別自然就會涉及到位元組之間排序的問題。
一、概念
1、大端模式
所謂的大端模式,是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;
2、小端模式
所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。
二、**例程分析
在此,我貼一段我寫的測試**
#include #include int main()
以下為顯示結果,(注:此程式在ubuntu 16.04 gcc 5.4 執行)
c[0]=78---c[1]=56---c[2]=34---c[3]=12
c[0]=260c94c---c[1]=260c94d---c[2]=260c94e---c[3]=260c94f
c=78-----*c=0x260c94c
*i=0x260c94c
由此可以發現 i 的高位址存放的是『0x12』,同時我們知道『0x12』是資料的高位; 低位址存放的是『0x78』,『0x78』是資料的低位,因此我們得出ubuntu 是小端模式。
在此,我補充乙個資料在記憶體中的存放問題,首先我們應該知道在記憶體中'棧'結構中記憶體是從高位址到低位址擴充套件的,也就是在此例中記憶體中的寫入的第乙個位元組是'0x12'
這次記錄就到此為止,歡迎各種互動。
關於大小端的問題
討論大小端的問題就是在討論低位元組儲存在低位址還是高位址的問題 大小端記憶方式 例題 unsigned int a 0x1234 unsigned char b unsigned char a 在32位大端模式處理器上變數b等於 解析 unsigned int a 0x1234的32位完全表示是0x...
關於大小端的經典問題
int ptr1 int a 1 可以這樣理解 a 1相當於a 5,相當於跨過了整個數值,然後ptr1 1 輸出其前乙個,就是結果5了。int ptr2 int int a 1 這個可以這樣理解 這個裡面 int a 1,a是指的乙個位址00h,當然位址也是由資料表示的,int a就是吧這個位址資料...
大小端問題
對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...