教你用簡單的程序判斷你的電腦是大端還是小端

碼字不易,對你有幫助
點贊👍/轉發↪️/關注 👀 支持一下作者
微信搜公衆號:不會編程的程序圓  看更多幹貨,獲取第一時間更新

 

如何用程序判斷自己的機器是大端還是小端?

通常情況下,我們的計算機都是小端存儲模式。

小端:數字的低位存儲到內存的低地址上。
大端:數字的低位存儲到內存的高地址上。

我們在 VS 中創建一個臨時變臉

 int a = 0x11223344;// 十六進制數

然後打開調試器,看到變量 a 在內存中是這樣存儲的:

 0x0133FC50  44 33 22 11

對於 Vs 調試中內存窗口的這行信息應該如何理解呢?它就表示:

十六進制數每兩位表示一個字節,地址也是十六進制數;int 類型在 32 位機器上大小爲 4 個字節。

 

如何理解十六進制數每兩位表示一個字節?

十六進制數每一位的取值範圍是 0 ~ 15,表示 16 種不同可能,對應 4 個二進制位(0000 ~ 1111),所以每一位十六進制可以表示 4 個二進制位,那麼兩個十六進制位就表示 8 個二進制位,也就是 1 個字節。

 

可以看到,在我的機器上,低位 44 存儲在 低地址(0x0133FC50)上,所以我的機器是 小端存儲模式。

 

如果是大端存儲模式,變量 a 在內存中的存儲應該如下圖所示:

現在,讓我們用程序來驗證一下我們的機器到底是大端還是小端。

 

方法一

 #include<stdio.h>
 ​
 int main(void) {
 ​
     int a = 0x11223344;
     int* pi = &a;
     char* pc = (char*)pi;//指針強轉
 ​
     printf("%x\n", *pc);//輸出 44 ,得到證實
 ​
     return 0;
 }

 

方法二

 #include<stdio.h>
 ​
 typedef union {
     int a;
     char ch[sizeof(int)];
 }BOS;//big or small
 ​
 int main(void) {
 ​
     BOS bos;
     bos.a = 0x11223344;
 ​
     printf("%x", (unsigned int)bos.ch[0]);//輸出 44
 ​
     return 0;
 }

 

如果本文你有地方沒有看懂,推薦閱讀以下文章,可以幫助你理解

 

推薦閱讀:

給你三個必須要學C語言的理由!

 

以上就是本次的內容。

如果文章有錯誤歡迎指正和補充,感謝!

最後,如果你還有什麼問題或者想知道到的,可以 在評論區/私信 告訴我呦,我可以在後面的文章加上你的真知灼見👁。

關注我,看更多幹貨!

我是程序圓,我們下次再見。🍂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章