情況1:利用陣列型別
#include
int checksystem()
int main()
情況2:利用位移運算
int i = 1;
if(1>>32 == 0)
cout<<"小端模式"cout<<" 大端模式"<
上述方法正確嗎?要理解為什麼不正確?
因為不要在數值上做文章,而大小端是嚴格與記憶體掛鉤的東西。如果int a=1; 那麼a&1==1一定成立,因為這是從數值角度運算的,已經給使用者遮蔽掉了大小端的問題。一定要int a=1; *((char*)(&a)) == 1 ,這樣判斷才有效。
下面總結一些有效的方法。
方法1:利用union型別 —— 可以利用union型別資料的特點:所有成員的起始位址一致。
#include
int checksystem()
c;
c.i=1;
return (c.ch==1);
} int main()
方法2:對int強制型別轉換
#include
#include
int main()
方法3:使用union和巨集定義
#include
#include
static union
endian = };
#define endian ((char)endian.ul)
int main()
補充:
大小端模式對union型別資料的影響。
#include
union
*p, u;
int main()
分析如下圖所示:
高位址 低位址
—— —— —— —— int
0 | 0 | 56 | 57
—— —— —— ——
—— —— char
56 | 57
—— ——
這裡需要考慮儲存模式:大端模式和小端模式。
大端模式(big-endian):資料的低位元組存放在高位址中。
小端模式(little-endian):資料的低位元組存放在低位址中。
union型資料所佔的空間等於其最大的成員所佔的空間,對union型成員的訪問都是相對於該聯合體基位址的偏移量為0處開始,即,聯合體的訪問不論對哪個變數的訪問都是從union的首位址位置開始。因此,上面程式輸出的結果就顯而易見了。
判斷系統大小端方法分析與總結
2011 03 09 wcdj 問題 如何用程式確認當前系統的儲存模式 大端還是小端 寫乙個c函式,若處理器是big endian的,則返回0 若是little endian的,則返回1。情況1 利用陣列型別 情況2 利用位移運算 上述方法正確嗎?要理解為什麼不正確?因為不要在數值上做文章,而大小端...
js陣列去重方法分析與總結
陣列去重經常被人拿來說事,雖然在工作中不常用,但他能夠很好的考察js基礎知識掌握的深度和廣度,下面從js的不同階段總結一下去重的方法。該階段主要通過迴圈遍歷陣列從而達到去重的目的 以下所有方法預設都那拿該陣列進行測試 var array 1,1 1 1 null null undefined und...
js陣列去重方法分析與總結
陣列去重經常被人拿來說事,雖然在工作中不常用,但他能夠很好的考察js基礎知識掌握的深度和廣度,下面從js的不同階段總結一下去重的方法。該階段主要通過迴圈遍歷陣列從而達到去重的目的 以下所有方法預設都那拿該陣列進行測試 var array 1,1,1 1 null,null,undefined,und...