計算機系統中,每一個地址單元對應一個字節(8bit),一種數據類型的數據可能佔用若干字節。如何安排這種數據類型中的各個字節,哪一個字節在低地址哪一個在高地址,以及一個字節中的各個比特的排列,這就牽涉到大小端模式。也就是你們常說的字節序和比特序問題。字節序和比特序通常是一致的,要麼都是大端,要麼都是小端。java
大端模式:低位(字節/比特)放在高地址中,高位(字節/比特)放在低地址中。
小端模式:低位(字節/比特)放在低地址中,高位(字節/比特)放在高地址中。
高位和地位是對於咱們正常閱讀和書寫來講,最開始是高位,例如int型數0x1234,0x12是字節的高位,0x34是字節的低位。
根據以上規則,咱們給出在大、小端序系統中整數0x0a0b0c0d的表示方式。
對於大端系統:
byte addr 0 1 2 3
bit offset 01234567 01234567 01234567 01234567
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0d
對於小端系統:
byte addr 3 2 1 0
bit offset 76543210 76543210 76543210 76543210
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0dspa
聯合體的存放順序是全部成員都從低地址開始存放,利用該特性能夠輕鬆得到當前系統採用大端仍是小端模式操作系統
BOOL IsBigEndian() { union NUM { int a; char b; }num; num.a = 0x1234; if( num.b == 0x12 ) { return TRUE; } return FALSE; }
通常操做系統都是小端模式;而通信協議是大端模式;java和平臺無關,默認是大端模式
常見的cpu的大小端:
大端:PowerPC、IBM、Sun
小端:x86
ARM既能夠工做在大端模式,也能夠工做在小端模式code