位元組的存儲順序
⑴ 計算機的位元組是怎樣存儲的
1、一般的數據存儲是「高高低低」存儲方式。
2、比如一個整數佔4個位元組,其中的高位數所佔位元組在高位位元組,其低位數所佔位元組在低位位元組,即高位數占高位元組,低位數占低位元組。
3、以整數129為例,要佔4個位元組,為(0000 0000 0000 0000 0000 0001 0000 0001),四個位元組的真棚絕液實存儲時,像0000 0001是最低位的位元組,存在最前面,像在它之前的三個字,會依次在這些位元組的後邊,即地址號更大。
(1)位元組的存儲順序擴展閱讀:
通常我們從最高有效位(most significant digit)開始自左向右書寫一個數字。在理解有效位這個概念時,可以想像一下支票數額的第一位增加1和最後一位增加1之間的巨大區別,前者肯定會讓自己喜出望外。
計算機內存中一個位元組的位相當於二進制數的位,這意味著最低有效位表示1,倒數第二個有效位表示2×1或2,倒數第三個有效位表示2×2×1或宏毀4,依次類推。
如果用內存中的兩個位元組表示一個16位的數,那麼其中的一個位元組將存放最低的8位有效位鏈物,而另一個位元組將存放最高的8位有效位,見圖10.5。
⑵ Big Endian與Little Endian位元組存儲順序
不同的CPU有不同的位元組序類型,這些位元組序是指整數在內存中保存的順序。分為小端格式和大端格式(Little-Endian&Big-Endian):
比如0x1234; 低8位是34,高8位是12;如果它們分配的內存其實地址是0x0001,
那麼如果是大端存儲,那麼0x0001內存低位地址存放高位位元組12;如果是小端存儲,那麼0x0001內存低位地址存放低位位元組34,0x0002存放12。
據Jargon File記載,endian這個詞來源於Jonathan Swift在1726年寫的諷刺小說 "Gulliver's Travels"(《格利佛游記》)。該小說在描述Gulliver暢游小人國時碰到了如下的一個場景。在小人國里的小人因為非常小(身高6英寸)所以總是碰到一些意想不到的問題。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的爭論而引發了一場戰爭,並形成了兩支截然對立的隊伍:支持從大的一端剝開的人Swift就稱作Big-Endians,而支持從小的一端剝開的人就稱作Little-Endians......(後綴ian表明的就是支持某種觀點的人)。
1980年,Danny Cohen在其著名的論文"On Holy Wars and a Plea for Peace"中為了平息一場關於在消息中位元組該以什麼樣的順序進行傳送的爭論而引用了該詞。該文中,Cohen非常形象貼切地把支持從一個消帶含息序列的最高位開始傳送的那伙人叫做Big-Endians,支持從最低位開始傳送的相對應地叫做Little-Endians。此後Endian這個詞便隨著這篇論文而被廣為採用。
little endian和big endian是表示計算機位元組順序的兩種格式,所謂的位元組順序指的是長度跨越多個位元組的數據的存放形式.
假設從地址0x00000000開始的一個字中保存有數據0x1234abcd,那麼在兩種不同的內存順序的機器上從位元組的角度去看的話分別表示為:
需要特別說明的是,以上假設機器是每個內派行悄存單元以8位即一個位元組為單位的. 簡單的說,little endian把低位元組存放在內存的低位;而big endian將低位元組存放在內存的高位.
現在主流的CPU,intel系列的是採用的little endian的格式存放數據,而motorola系列的CPU採用的是big endian.
比如: int x, 它的地址為0x100。 那麼它占據了內存中的Ox100, 0x101, 0x102, 0x103這四個位元組(32位系統,所以int佔用4個位元組)。
上面只是內存位元組組織的一種情況: 多位元組對象在內存中的組織有一般有兩種約定。 考慮一個W位的整數。它的各位表達如下:
Xw-1, Xw-2, ... , X1, X0,它的
MSB (Most Significant Byte, 最高有效位元組)為 Xw-1, Xw-2, ... Xw-8;
LSB (Least Significant Byte, 最低有效位元組)為 X7,X6,..., X0。
其餘的位元組位於MSB, LSB之間。
這就引出了大端(Big Endian)與小端(Little Endian)的問題。如果LSB在MSB前面, 既LSB是低地址, 則該機器是小端; 反之則是大端。
對於數據中跨越多個位元組的對象, 我們必須為塵渣它建立這樣的約定:
對於跨越多個位元組的對象,一般它所佔的位元組都是連續的,它的地址等於它所佔位元組最低地址。(鏈表可能是個例外, 但鏈表的地址可看作鏈表頭的地址)。
import java.nio.ByteOrder;
⑶ 位元組順序的介紹
位元組順豎顫序是指占內存多於一個位元組類型的數據在內存中的存放順序,通常有小端、大端兩種位元組順序。小端位元組序指低位元組數據存放在內存低地址處,高位元組數據存放在內存高地址處;大端位元組序是高位元組數據存放在低地址處,低位元組數仿歷據存放在高余大敗地址處。
⑷ 計算機存儲是低位在前高位在後嗎應該怎麼區分16進制中哪個是高位哪個是低
計算機存儲:最小單位是位元組,存儲順序(小端模式)為低位位元組在前、高位在後
16進制銷輪:中最右邊的是最低位,標記為第0位,向左邊一位是第1位,這樣一直到這個數據的第15位。