計算機大端存儲與小端存儲有啥用
① 什麼是MSB、LSB和大端、小端是否是一個概念
MSB是Most Significant Bit的縮寫,最高有效位。在二進制數中,MSB是最高加權位。與十進制數字中最左邊的一位類似。通常,MSB位於二進制數的最左側,LSB位於二進制數的最右側。
LSB(Least Significant Bit),意為最低有效位;MSB(Most Significant Bit),意為最高有效位。
計算機業界,端表示數據在存儲器中的存放順序。大端與小端是兩種數據的存儲方式!
大端方式將高位存放在低地址,小端方式將高位存放在高地址。(比如將16位數0x1234存放在地址0x00,0x01兩個連續地址中時,按照大端方式應該0x00中存放0x12,而0x01中存放0x34,小端方式0x00中存放0x34,而x01中存放0x12)
② 大端模式和小端模式的區別及如何判斷的存儲器的模式
一個數需要超過一個位元組來存儲時,就有大端和小端的區別,只用一個位元組時,無所謂大小端
低位的放在低地址,也就是小個在前,叫小端,反之叫大端
c和c++需要面對這樣的問題,java等高級語言已經屏蔽這個差異,不需要額外處理
在c中,可以用以下代碼片段來判斷是大端還是小端
union {char c; int i;} u;
u.i = 1;
if(u.c == 1){//小端}
else{//大端}
③ 大端序與小端序的概念
CPU將數據保存在內存中有兩種方式:稱為大端序與小端序
存入內存中的數據都是二進制的,用0和1表示。先來說明一下什麼是高位位元組和低位位元組。
有4位元組int類型數值0x12345678
在這里0x12 就叫做最高位位元組。 0x78叫最低位位元組。
然後在說低位地址和高位地址。
在內存中劃分出一塊空間,起始地址是0x20 ,0x20就是最低位地址。0x23就是最高位地址。
現在用這塊空間存儲0x12345678
如果在高端序CPU中,會這樣存儲
最高位位元組,放在了最低位地址。
在低端序CPU中,會這樣存儲
保存數據前,要確認用哪種存儲方式,如果不把它確定好,數據傳輸出去,如果另一台主機保存數據方式不同,那麼解碼時也會出現錯誤。
目前互聯網行業已經統一了規則,在進行網路傳輸數據前,先將數據轉換成大端序。然後在進行傳輸。
④ 大端模式和小端模式
具體如下:
1、大端模式:
大端模式,是指數據的高位,保存在內存的低地址中,而數據的低位,保存在內存的高地址中,這樣的存儲模式類似於把數據當作字元串順序處理。
地址由小向大增加,而數據從高位往低位放;小端模式,是指數據的高位保存在內存的高地址中,而數據的低位保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。
在大端模式下,前16位應該這樣讀: e6 84 6c 4e ( 假設int佔4個位元組)。
記憶方法: 地址的增長順序與值的增長順序相反。
2、小端模式例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000。
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000。
在小端模式下,前16位應該這樣讀: 4e 6c 84 e6( 假設int佔4個位元組)。
記憶方法: 地址的增長順序與值的增長順序相同。
大小端模式:
為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個地址單元都對應著一個位元組,一個位元組為 8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於 8位的處理器。
例如16位或者32位的處理器,由於寄存器寬度大於一個位元組,那麼必然存在著一個如何將多個位元組安排的問題。因此就導致了大端存儲模式和小端存儲模式。例如一個16bit的short型x,在內存中的地址為0x0010,x的值為0x1122,那麼0x11為高位元組,0x22為低位元組。
對於 大端模式,就將0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,剛好相反。我們常用的X86結構是小端模式,而KEIL C51則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬體來選擇是大端模式還是小端模式。
⑤ 大端存儲法與小端存儲法有什麼不同
大端排序的好處是接收數據的程序可以優先得到數據的最高位,以便快速反應。
比如我有一個控制溫度的上位機程序,該程序接收大端方式編碼的溫度信號0x00fe,對比原來的溫度值,假設是0x0135。那麼在接受第一個位元組0x00的時候,上位機就可以判斷溫度比原來下降了,可以立即發出指令打開加熱器。而對於小端排序的方式,上位機只有在接收到完整的兩個位元組的時候才能做出反應。如果採用串列通信,用只對信號的每一個位元組單獨校驗的話,波特率為9600時,大端編碼下,上位機的響應時間為1ms,小端排序方式下,上位機響應時間為2ms。這時,大端編碼就比小端排序更快。如果需要對完整的通信包進行校驗,則沒有區別。
在串列通信測試程序中,計算機顯示的位元組順序一般就是接收順序。如果用大端編碼的話,測試程序直接就可以顯示出從大到小排列好的數據。而小端排序的方向相反,可視性不好,容易看花眼掉。
結論是:1、串列通信(包括乙太網、wifi、串口、usb等)如果採用大端編碼有時會使系統響應更快速。2、串列通信採用大端編碼有利於調試。
小端排序下,選定一個數據的起點後,只需要重復進位加法就可以實現高精度加法計算。減法也是一樣。數組的第0位固定是最低位。而大端方式下,如果高精度計算的精度可變,就很難確定數組的第0位到底代表多大。不同精度的計算還會產生數據對齊問題。比如早期的16位cpu中,int類型和long類型做加法,用小端排序就很容易從指針位置開始計算。而大端排序則非常復雜。加法運算是非常常用的運算,其性能直接影響程序的整體性能。所以cpu中要採用性能較好的小端排序。
由於cpu本身是小端排序,如果內存和文件也採用小端排序的話,就可以把文件中的數據直接存儲到內存中,再直接把內存中的數據存儲到cpu的寄存器。這樣不僅提高計算機的性能,程序也變得簡單。
結論是:所有直接與硬體有關的代碼都適合按小端排序
⑥ 大端存儲法與小端存儲法有什麼不同
大端模式就是低位存放在高地址上。高位存放在地址上。
小端模式就是地位存放在低地址上。高位存放在高地址上。
例如,16bit寬的數0x1234在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:
內存地址 0x4000 0x4001
存放內容 0x34 0x12
而在Big-endian模式CPU內存中的存放方式則為:
內存地址 0x4000 0x4001
存放內容 0x12 0x34
⑦ 大端存儲方式和小端存儲方式的區別
採用大小模式對數據進行存放的主要區別在於在存放的位元組順序,大端方式將高位存放在低地址,小端方式將低位存放在高地址。採用大端方式進行數據存放符合人類的正常思維,而採用小端方式進行數據存放利於計算機處理。到目前為止,採用大端或者小端進行數據存放,其孰優孰劣也沒有定論。
⑧ 大小端位元組序存在的意義,為什麼不用一個標
因為大小端都有很多應用,cpu很多也能在這兩種標准之間切換。
比如,常見的pc機是小端存儲,但TCP/IP協議中數據是按照大端格式存放的,兩者統一出現在pc機上,能保證運行無誤。
沒有必要做統一標準的工作,即使做了,也一定要兼容以前的兩個標准。
⑨ 什麼是大端模式和小端模式
如果將一個32位的整數0x12345678存放到一個整型變數(int)中,這個整型變數採用大端或者小端模式在內存中的存儲由下表所示。為簡單起見,本書使用OP0表示一個32位數據的最高位元組MSB(Most Significant Byte),使用OP3表示一個32位數據最低位元組LSB(Least Significant Byte)。
---------------------------
地址偏移大端模式小端模式
0x00 12(OP0) 78(OP3)
0x01 34(OP1) 56(OP2)
0x02 56(OP2) 34(OP1)
0x03 78(OP3) 12(OP0)
---------------------------
如果將一個16位的整數0x1234存放到一個短整型變數(short)中。這個短整型變數在內存中的存儲在大小端模式由下表所示。
---------------------------------
地址偏移大端模式小端模式
0x00 12(OP0) 34(OP1)
0x01 34(OP1) 12(OP0)
-------------------------------------
⑩ 大端存儲和小端存儲各自的優缺點是什麼
沒有什麼優缺點.
最好輸入輸出流,程序一致用同一種方式,全用big endian,或 little endian. 省去byte 交換。