写一段程序,判断一个操作系统是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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章