寫一段程序,判斷一個操作系統是16位還是32位?

法一:利用sizeof

可以使用sizeof計算int的字節長度來判斷是32位還是16位。

32位機器下:sizeof(int) = 4;16位機器下:sizeof(int) = 2

但是實際中可能64位的機器sizeof(int)也是4字節,因爲很多時候是編譯器決定要佔用幾個字節


法二:利用最大值

1. 機器位數不同則表示的數字的最大值是不同的。

    32位機器下int的最大值爲2147483647,16位機器下int的最大值是32767

2. 我們可以利用最大值是否溢出情況來判斷

    定義一個變量num賦值32768,如果是16位機器這個時候超過了int最大值變成了-32768,如果是32位機器不會超過

[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. int main(){  
  2.     //判斷機器是16位還是32位  
  3.     int num = 32768;  
  4.     if(num > 32767){  
  5.         printf("32位機器\n");  
  6.     }  
  7.     else{  
  8.         printf("16位機器\n");  
  9.     }  
  10.     return 0;  
  11. }  

法三:對0取反

1. 32位機器下無符號整型的數值範圍是[0,4294967295],16位機器下無符號整型的範圍是[0,65535]

2. 0的二進制是所有位都是0

    32位下對0取反的結果是所有位都是1,如果把這個數賦值給一個無符號整型變量num,則num值爲4294967295

    16位下對0取反的結果是所有位都是1,如果把這個數賦值給一個無符號整型變量num,則num值爲65535

3. 利用對0取反後的結果賦值給無符號整型變量來判斷值是否大於65535即可

[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. int main(){  
  2.     unsigned int num = ~0;  
  3.     if(num > 65535){  
  4.         printf("32位機器");  
  5.     }  
  6.     else{  
  7.         printf("16位機器");  
  8.     }  
  9.     return 0;  
  10. }  
發佈了57 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章