for循环问题

intmain(){inti,a,sum=0;printf("enternumber:\n");scanf("%d",&a);for(i=a;i<=1000;i++)su... int main()
{
int i,a,sum=0;
printf("enter number:\n");
scanf("%d",&a);
for (i=a;i<=1000;i++)
sum+=i;
printf("result is :%d\n",sum);
getch();
return 0;
}
输入1,请问结果为什么会是-23788?
如果把int整型改为long型,结果会变为0 ,这是为什么?
展开
 我来答
tan_guo_hao
2015-12-04 · TA获得超过4665个赞
知道小有建树答主
回答量:968
采纳率:0%
帮助的人:860万
展开全部

c语言规定一个int至少和一个short一样大,从图中可以看出你的系统比较旧,用的编译器应该也是n年前的了。所以你的int一定是16位的。

1+2+...+1000,求和结果是500500,即0x7A314,超出unsigned short的最大值65535.那么截掉高位就是0xA314.而又因为int是有符号的,所以0xA314为负数的补码形式,将其取反加一,得到他的绝对值为0x5CEC,也就是十进制23788,那么0xA314输出的就是-23788,更简单就是直接用计算器计算:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式