有错误,这段程序会陷入死循环。仔细分析每次for循环x值的变化:
第1次,x = 4
第2次,x = 16
第3次,x = 256
第4次,x = 65536
第5次,x = 65536 * 65536 = 4294967296 = 2 ^ 32(这个数超出32bit整数能表示的范围,导致发生截断,最后x = 0)
然后每次x都等于0,永远出不了for循环
如下修改,就看到了你想要的结果了!
当x = 65536;之后x = 65536 * 65536 =0xffffffff;相当于与0溢出啦,就陷入是循环了;
#include
int main()
{
int x=2;
int i=0;
for(i=0; x<65536;i++){//吧x<=65536改为x<65536
x=x*x;
printf("x=%d i=%d\n",x,i);
}
printf("%d\n",i);
return 0;
}
程序运行到后面x的值超过了int的范围
65536会超出32位整数可表达的范围(只能±32767),所以请将int x=2;改成long x=2;