在計算機記憶體中,通常是以位元組(byte),也就是 8 個位(bit)為基本儲存單元(也有以 16 位為基本儲存單元的)。對於像c++中的char這樣的資料型別,它本身就是占用乙個位元組的大小,不會產生什麼問題。但是當數制型別為int,在32bit的系統中,它需要占用4個位元組(32bit),這個時候就會產生這4個位元組在暫存器中的存放順序的問題。比如int maxheight = 0x12345678,&maxheight = 0x0042ffc4。具體的該怎麼存放呢?這個時候就需要理解計算機的大小端的原理了。
##大端:(big-endian):
就是把數值的高位位元組放在記憶體的低位位址上,把數值的地位位元組放在記憶體的高位位址上。
##小端:(little-endian):
就是把數字的高位位元組放在高位的位址上,低位位元組放在低位位址上。
【注】不管是大端法還是小端法儲存,計算機在記憶體中存放資料的順序都是從低位址到高位址,所不同的是首先取低位元組的資料存放在低位址還是取高位元組資料存放在低位址。
大端法和小端法指的是位元組在記憶體中儲存時的排列規則,而不是資料中的位的排列規則。也有以位序排列的機器,但很少見。另外,再次明確一下,大端法或小端法是資料在儲存時的表現,而不是在暫存器中參與運算時的表現。
我們常用的x86結構都是小端模式,而大部分dsp,arm也是小端模式,不過有些arm是可以選擇大小端模式。所以對於上面的maxheight是應該以小端模式來存放,具體情況請看下面兩表。
###(1)小端規則
0x0042ffc4
0x0042ffc5
0x0042ffc6
0x0042ffc7
0x78
0x56
0x34
0x12
###(2)大端規則
0x0042ffc4
0x0042ffc5
0x0042ffc6
0x0042ffc7
0x12
0x34
0x56
0x78
通過上面的**,可以看出來大小端的不同。(注:其實在計算機記憶體中並不存在所謂的資料型別,比如char,int等的。這個型別在**中的作用就是讓編譯器知道每次應該從那個位址起始讀取多少位的資料,賦值給相應的變數。)
計算機儲存 大小端
大端模式,big endian,是指高位元組在前,低位元組在後的排布方式 具體來講,在儲存中高位元組在低位址,低位元組在高位址 在通訊中,高位元組先傳輸,低位元組後傳輸 小端模式,little endian,是指低位元組在前,高位元組在後的排布方式 具體來講,在儲存中低位元組在低位址,高位元組在高位...
驗證計算機的大小端
大端 資料的低位元組放在記憶體的高位址中,高位元組放在記憶體的低位址中。小段 資料的低位元組放在記憶體的低位址中,高位元組放在記憶體的高位址中。可以用乙個聯合體來驗證 include typedef union un int main return ret c語言中聯合體共用一片記憶體空間,程式執行...
什麼是計算機
本人是學電子資訊工程專業畢業的,出來從事前嵌入式軟體相關的工作。但在工作的過程中,慢慢的發現自己的計算機的基礎是很薄弱的,常常因為不懂理論基礎遇到很多的問題。為此我決定要不回來這方面的不足。從今天開始我就按照我每天學習的東西寫到部落格上。傻瓜計算機 我常常問自己什麼是計算機,今天從書上看到的答案是 ...