c语言中为什么会出现正数加正数是负数的情况

如1+2=-48

这和C语言中数据的储存有关。C语言中数据的储存空间是有限的,比如说整型数据,占四个字节,从而整型数是有范围的,从-2^31+1到2^31,正负号根据二进制数第一位决定。并且运算是以二进制来进行的,当两个数加和超出范围时,自动舍去超出的位数(二进制),所以当然可能两个很大的正数相加等于负数咯。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-02-15
如果涉及非常大的数,有可能会溢出.C语言最大可显示65535,即2^16-1;最高位(二进制第16位)为1表示负数.如果两数的和大于65535,则只能显示负数.
如果1+2=-48,这肯定不是相加的结果.你可能调用了其它的函数.
第2个回答  2009-02-15
两个正数相加的和越界了

c语言中为什么会出现正数加正数是负数的情况
这和C语言中数据的储存有关。C语言中数据的储存空间是有限的,比如说整型数据,占四个字节,从而整型数是有范围的,从-2^31+1到2^31,正负号根据二进制数第一位决定。并且运算是以二进制来进行的,当两个数加和超出范围时,自动舍去超出的位数(二进制),所以当然可能两个很大的正数相加等于负数...

C语言正数相加变负数
编译器的问题。有可能你的编译器int类型是16位的。你可以把你的sum类型定义成long试一试。

C语言随机数,如何生成既有正数又有负数的随机数呢
C语言生成的随机数为无符号数,即都是正的。要想生成正负随机的,可以先通过模除限定返回,再减去对应的范围的中间值即可。比如,要获取-1000~+1000范围的随机数,总的数量为2001个,这样就可以通过代码 rand()%2001 使得到的结果限制在0-2000范围,再减去1000, 结果就是-1000~+1000之间了。写成代...

C语言中让两个正的int型变量相加的程序为什么运行结果会出现负数?
因为int是有最大限制的,当相加的结果超出这个限制之后,(就是所谓的溢出),最高位可能会变为1,也就是表示负数,所以结果为负数

我的VC++6.0运行老出错,该得正数的老得负数,代码都对,就是结果老错,不...
我帮你改了一下,有注释,你看看:include "stdio.h"void main(){ int x,n, s = 0;\/\/ 变量使用之前要初始化,否则会是一个随机值 printf("n=");scanf("%d",&n);x=1;while(x<=n){ s=s+x;x=x+1;} printf("1+2+...+%d=%d\\n",n,s);} 运行结果:...

反码示例
理解溢出的关键在于计算机的数值表示方式。在补码中,正数和负数的表示规则不同。正数的原码、反码和补码相同,而负数的反码是其原码取反然后加一,补码则在反码的基础上,最低位加一。当加法或减法过程中产生进位,超出可表示范围时,就会出现溢出,导致结果错误。在计算机编程中,特别是使用C语言时,理解...

C语言数组中出现负数。
因为超过范围了,int型的范围是-2^31~2^31-1,而56以后的数超过int所允许的范围了,把数组f改成long long型的就好了。

为什么C语言算出来是负数?大神们帮忙检查一下吧
你的m的初步估计是3的8次方4的8次方乘以2 144194 然后肯定是超出界限了。。int是2个字节。。也就是16位,第一位是数据的正负0正1负,15位是数值最大的值是32767 超出了。。。然后你最后结果的反正是超出范围了。,。最终是哪里超出的就不一定是最后了。。。当你m还在循环的时候就超出了。。

c语言:输入一组整数,统计并输出其中的正数的累加和,及负数的个数。
4,9,-6,8,10,4};int len;int posSum = 0, negCnt = 0;int i;len = 10;for (i=0; i<len; i++) {if (arr[i]>0)posSum += arr[i];if (arr[i]<0)negCnt++;}printf ("正数累加和:%d\\n负数个数:%d\\n", posSum, negCnt);getch (); \/*屏幕暂留*\/return 0;} ...

C语言里编辑了一个程序 算两个数绝对值之和 输入正数的时候结果是对的...
你看一下scanf里面的%d,%d,中间的逗号是中文字符还是英文,输入数据时中间的逗号也要保持一致(中文逗号跟英文逗号不一样)程序没问题,我试过了,如果程序里用英文逗号,输入时用中文逗号,我也会得到你的结果

相似回答