出现负数,是因为奇数、偶数的和太大,超过了long(长整型)类型的最大值了。
个数是对的,0-151554545共有151554546个数,其中奇数偶数各有75777273个。
至于for不动了,是for循环进入死循环了,你的编译器中int是2bytes,最大值为32768,当i加到32769的时候,就越界了,成为负数,所以i永远不会大于你输入的151554545这个数值,所以死循环。
c语言什么情况下得负数
这个问题有多种可能,不一而足。
算法有错误,最终计算结果是负数。输出自然会是负数。
例如:
int a=1
int b=a-2
printf("b=%d",b)
//输出结果:b=-1
超过变量类型的最大取值范围,发生溢出。
例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需要使用取值范围更大的数据类型。
例程:
#include<stdio.h>
void main(){
int a,b,ch
a=32767
b=a+1
printf("a=%d,b=%d",a,b)
ch=getch()
}   
//输出结果:a=32767,b=-32768