通過使用union可以知道自己所用的編譯器是大端模式還是小端模式。
例1:
#includeusing namespace std;
union un
u;int main()
else if(u.ch == 0)
//輸出位址看一下
cout<
.號的優先順序高於&運算子,所以加不加括號都是乙個效果。
上面的&u.ch和&(u.ch)是等效的。
例2:union
sint;
struct
sch;
}un;
int main()
輸出結果顯示:
解析:通過輸出結果可以看出:
1)在結構體內部,元素的位址是連續的。
2)union內部的位址,i,m,ch1的位址是相同的,最先定義的對齊。
3)大小端問題:
低位址存低位元組,高位址存高位元組是小端模式。反之,是大端模式。
struct sch中有4個char型的變數,記憶體位址分別對應i的int型位址。
本例中ch1是低位址,對應i的0x78低位元組的值,所以是小端模式。
用union判斷cpu的大小端
版本1 在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高...
利用union判斷系統的大小端
大端模式 所謂的大端模式,是指資料的高位,儲存在記憶體的低位址中,而資料的低位,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 小端模式 所謂的小端模式,是指資料的高位儲存在記憶體的高位址中,而數 據的低位儲存在記憶體的低位址中,這種...
利用union判斷系統的大小端
int checkcpuendian 返回1,為小端 反之,為大端 c c.a 1 return 1 c.b 大端模式 big endian 是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從...