C语言 关于i溢出的 一个程序

来源:百度知道 编辑:UC知道 时间:2024/05/15 15:26:25
#include<stdio.h>
void main()
{
int m=12,n=32,i=1;
while(2*m!=n)
{
m+=i;
n+=i;
i++;
}
printf("%d\n",m);
printf("%d\n",i-1);
printf("%d\n",n);
}
看看哪错了 i的输出怎么是-的 m,n的结果是对的

因为执行的次数很多,i的最终值超出了int的范围,比如i=01111111(二进制),也就是int可表示的最大整数,在执行加一操作,就会变成10000000,再加就是10000001,它们前面的一位就溢出了。在C语言中,第一位是符号位,0正1负,所以你的结果就是负的啦

解决方法:将i定义成long型