1 參考文章
參考文章主要為
2 定義
先搞清幾個問題
a 什麼是高低位: 其實和小學數學減法低位向高位借位的含義是一樣的,12345越左位就越高,反之就越低。
c 儲存問題;
下面談到如何存放的問題,具體就是數字12345678怎麼存到位址上呢?
1)我自己拍腦殼想的話就是直接扔到記憶體上去就得了。
位址----0x4000 0x4001 0x4002 0x4003 0x4004 0x4005 0x4006 0x4007
資料---- 1 2 3 4 5 6 7 8
cpu讀取,
首先獲取記憶體首位址和塊的大小,
然後開始讀取,在記憶體上按照從低位址到高位址的順序(其實也就是位址從小到大),讀取1,2,3,4,5,6,7,8
讀完各個數,cpu就知道是12345678了。
這是大端儲存和讀取,就是motorola的powerpc幹的事情
2)同樣是12345678,還有另一種資料儲存和讀取方法
位址----0x4000 0x4001 0x4002 0x4003 0x4004 0x4005 0x4006 0x4007
資料---- 8 7 6 5 4 3 2 1
cpu讀取,
a)首先獲取記憶體首位址和塊的大小,
b)不同的事,它從記憶體末,也就是記憶體的高位址讀取開始往低位址讀取,但是讀的具體資料的順序還是一樣的,還 是先讀1,再讀2,依次3,4,5,6,7,8
c)讀完各個數,cpu就知道是12345678了。
這是小端儲存和讀取,是intel的x86pc幹的事情,前段時間聯想收購了ibm的x86伺服器業務,側面可見ibm伺服器的處理器還是intel公司的。
3 總結
從上面可見,
a)不論哪種cpu,不管資料怎麼儲存,兩種cpu讀取資料的時候仍然是按照從高位到低位讀取的,比如1234,就先從千位1開始讀,然後1,2,3,4
b)記憶體的高低位址,數字的高低位,這兩個概念在cpu上也是相同的。
c)其實兩種儲存器變的只是資料儲存的位置方式變了,因為資料位置變了,讀取的位置變了,但是讀取的資料順序還是原來那個樣子。 囉嗦的例子就是,同樣是1234這個數字,powerpc在記憶體上從低位址開始讀,x86在記憶體上從高位址開始讀,但是讀的仍然是1,2,3,4,5,從低位到高位讀到的資料。
也就是讀取資料,仍然是從低位到高位讀資料,但是有從低位址到高位址,從高位址到低位址兩種方式。
位元組序(大小端)理解
位元組序,就是 大於乙個位元組型別的資料在記憶體中的存放順序。是在跨平台和網路程式設計中,時常要考慮的問題。位元組序經常被分為兩類 最高記憶體位址 0xffffffff 棧區 從高記憶體位址,往 低記憶體位址發展。即棧底在高位址,棧頂在低位址 堆區 從低記憶體位址 往 高記憶體位址發展 全域性區 常...
大小端 網路位元組序 本地位元組序問題
總結 1 80x86使用小端法 即本地位元組序 網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳...
大小端 網路位元組序問題
總結 1 80x86使用小端法,網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳送的buffer...