问答题 不能用sizeof()函数,如何判断操作系统是16位还是32位的
【正确答案】
【答案解析】如果没有强调不许使用sizeof,一般可以使用sizeof计算字节长度来判断操作系统的位数,如在32位机器上,sizeof(int)=4,而在16位机器上,sizeof(int)=2。除此之外,还有以下两种方法。
方法一:一般而言,机器位数不同,其表示的数字的最大值也不同,根据这一特性,可以判断操作系统的位数。
例如,运行如下代码:
#include <stdio.h>
int main()
{
int i=65536;
printf("%d/n",i);
int j=65535;
printf("%d/n",j);
return 0;
}
由于16位机器下,无法表示这么大的数,会出现越界情况,所以程序输出为
0
-1
而在32位机器下,则会正常输出,程序输出为
65536
65535
之所以会有区别,是因为在16位机器下,能够表示的最大数为65535,所以会存在最高位溢出的情况。当变量的值为65536时,输出为0;当变量的值为65535时,输出为-1。而在32位机器上,则不会出现溢出的情况,所以输出为正常输出。
方法二:对0值取反,不同位数下的0值取反,其结果不一样。例如,在32位机器下,按位取反运算,结果为11111111111111111111111111111111。运行如下代码:
#include <stdio.h>
int main()
{
unsigned int a=~0:
if(a>65536)
printf("32位/n");
else
printf("16位/n");
return 0;
}
程序输出为
32位