这个问题有多种可能,不一而足。

超过变量类型的最大取值范围,发生溢出。
例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结果就有可能是负数。这种情况,就需要使用取值范围更大的数据类型。
出现负数,是因为奇数、偶数的和太大,超过了long(长整型)类型的最大值了。
个数是对的,0-151554545共有151554546个数,其中奇数偶数各有75777273个。
至于for不动了,是for循环进入死循环了,你的编译器中int是2bytes,最大值为32768,当i加到32769的时候,就越界了,成为负数,所以i永远不会大于你输入的151554545这个数值,所以死循环。
这语言要将负数输出为正数,第一种方法是调用绝对值函数,绝对值函数的特点就是把一个负数反号之后变成正数,所以自然也就可以输出成正数了第二种办法是进行一个if的逻辑判断,如果这个数小于零,那么就在他前面加一个减号,表明进行反号之后再输出
第一位符号位1为负,0为正。 正数的补码和2进制原码是一样的。
3、对|X|+1 取反,就得到它的补码了 。
有符号数的表示方法是由硬件决定,而不是由C决定的。有三种表示方法:
这个方法有个缺点是有两个零: +0 和 -0。这会引起混淆,而且用两个位组合来表示一个值也有些浪费。
2、二进制补码(最普遍的系统)
1)如果是无符号字节, 1000 0000 该组合为 128
2)如果是有符号字节, 1000 0000 该组合为 -128
第一种表示数的范围是 0 ~ 255;
第二种表示数的范围是 -128 ~ +127,对于一个二进制补码数取负数,最简单的方法就是取反、加 1。
通过反转位组合中的每一位以形成一个数的负数,例如:
这种方式也有一个 -0:1111 1111。其范围是 -127 ~ +127。