你要求的是2^1+2^2+2^3+。。。+2^16。前面2的几次方的时候值比较小,int类型的term还能装的下;后面的数越来越大,不仅超出了int类型的term最大长度,还超出了long类型的sum的最大长度。因此输出的是无符号long类型的最小值0。
解决办法是:把term和sum设为double类型,后面用浮点类型格式(长度满足要求)输出(“%f",sum)。
数据溢出后隐式转换导致输出是0,不同编译器对数据类型的长度定义不一样,你可以用sizeof(int)看一下你的编译器给的int是几个字节。
你term没初值,C语言默认是0,也就是说,你的term=term*2,始终得到的term还是0;
sum也是0,因此结果始终是0;
你在long sum=0语句前面加上一句 term=1;结果就对了;
因为 return 0;所以就、、、
我不认为上面输出结果为0