应该是因为你使用的是有符号数,long在VC6.0中占4个字节,当最高位是1的时候,该long变量就是负数;建议将所有的long类型修改为unsigned long
原因:scanf用法不对,分析如下 1,代码中有一点错误 scanf ("i=%1f",&i);原型是int scanf(constchar*format,...);format为格式说明字符串,这个跟printf里面的不同,不能有多余杂质 故正确用法是scanf ("%1f",&i);特别注意的地方是,浮点型不能指点位数 进一步修改为scanf ("%f",&i);到...
因为超过范围了,int型的范围是-2^31~2^31-1,而56以后的数超过int所允许的范围了,把数组f改成long long型的就好了。
这个问题有多种可能,不一而足。算法有错误,最终计算结果是负数。输出自然会是负数。例如:int a=1;int b=a-2;printf("b=%d",b);//输出结果:b=-1超过变量类型的最大取值范围,发生溢出。例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结...
include int main() { int arr[] = {1, 2, 3, 4, -5, 6, 7, 8};int n = sizeof(arr) / sizeof(int);int i, flag = 0;for (i = 0; i < n; i++) { if (arr[i] < 0) { printf("第一个负数为:%d\n", arr[i]);flag = 1;break;} } if (!flag) { pr...
它并不是直接处理负数问题,而是通过字符串形式来存储和相加大数。尽管文章中提及了字符串比较和长度检查,但这更多是为了验证计算结果是否超过100位,而非处理负数。因此,可以总结为:C语言在处理大数时,通过字符串形式间接地处理可能的数值范围,而非直接处理负数,主要用于计算斐波那契数列等特定场景。
C语言程序运行结果出现大的负数,往往是以上问题中的一个或几个造成的。正确的做法是,对于每一个变量必须在使用前进行显式的初始化,慎用指针以避免野指针和指针越界,控制递归深度以及局部变量的使用量,避免栈溢出,以及对整数操作的范围进行检查,防止整数溢出。通过这些严谨的编程实践,可以显著降低程序出错的风险,提高程...
程序没有问题,你这个执行结果有点莫名其妙 给你个建议,mlt函数里c没必要定义为数组,就一个整型变量就够了:int mlt (int i,int j,int a[N][N],int b[N][N] ){ int k,c=0;for(k=0;k<N;k++)c += a[i][k]*b[k][j];return c;} ...
这和C语言中数据的储存有关。C语言中数据的储存空间是有限的,比如说整型数据,占四个字节,从而整型数是有范围的,从-2^31+1到2^31,正负号根据二进制数第一位决定。并且运算是以二进制来进行的,当两个数加和超出范围时,自动舍去超出的位数(二进制),所以当然可能两个很大的正数相加等于负数...
int i = 0;print("%d",~i); //就是负数 -1 因为取反后最高位为1,最高位即为符号位,1为负 0为正