人間夜行

一切の有為の法 夢幻泡影の如し

当数值超出范围

| 评论

这两天在学校的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. 实在是太有趣了。

评论