这两天在学校的Windows机器上捣鼓C语言的程序,无意中编了这样一个程序。要命的是,它的运行结果是出人意料的。
#include <stdio.h>这段代码是经过调整的,便于说明问题。
int main()
{ int a=1;
for(;;)
{
a*=2;
printf("%d\n",a);
if(a==0)
{
printf("Top reached.\n");
getchar();
}
}
return 0;
}
可以看出,整数a的值会超出int所定义的范围。由于C语言是低级语言,所以不会报错。但问题在于为什么后来a会等于0?!目前没有得到解释。可能是因为32位机器的限制吧。
实验环境:Windows XP SP3,Dev-C++ 4.9.9.2,gcc 3.4.2-20040916-1。
实际输出:
(前略)
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
-2147483648
0
Top reached.
实在是太有趣了。