从1加到100,为什么把100改成一万,答案就出错了.

来源:百度知道 编辑:UC知道 时间:2024/06/08 00:50:22
程序如下:
void main()
{
unsigned a,b=0;
for(a=0;a<=100;a++)
b+=a;
printf("%d\n",b);
}

这个结果运算是对的,但是为什么吧100改成1000,或者一万,运算结果就错了呢?
long
unsigned long
float
double
都试过了,还是计算错误,郁闷.难道程序哪里要改下?

printf("%d\n",b);
改成printf("%ld\n",b);就可以啦。这样数据对象才能输出long型的。
void main()
{
long a,b=0;
for(a=0;a<=10000;a++)
b+=a;
printf("%ld\n",b);
}

void main()
{
unsigned long a,b=0;
for(a=0;a<=100;a++)
b+=a;
printf("%ld\n",b);
}

可能是超界了,换这个试试

我想知道你的编译器是?
用这个试一下
#include<stdio.h>

int main()
{
long a, b = 0;
for(a=0;a<=10000;a++)
b+=a;
printf("%ld\n",b);
}

有一点可以肯定,错误在于数据溢出。

#include<stdio.h>
#include<stdio.math>
void main()
{
long int a,b=0;
for(a=0;a<=10000;a++)
b+=a;
printf("%ld\n",b);
}
调试不出来的话可能是安装的Turbo C环境有点问题。

a的类型是unsigned,它在内存中占2个字节,可以表示的数的范围是0到65535.一万当然已经超过了它能表示的范围了。

你所使用的编译环境默认的unsigned型数据只占2个字节 ,一个字节有8位,最大就是1111111111111111(二进制数),也就是十进制数的6