#include<stdio.h>
int main()
{
int xs1;
int xs2;
int fz1;
int fz2;
scanf ("%d %d",&xs1,&fz1);
scanf ("%d %d",&xs2,&fz2);
int a=xs2-xs1;
int b=fz2-fz1;
printf("两个时间相差%d小时%d分钟\n",a,b);
return 0;
}
我输入:
10 20
10 10
出来的结果是0小时-10分钟
这是为什么
C语言问题,请问为什么b的结果是负数呢?
你不能这算,比如说第一个时间是9点40,第二个是10点10分,按你这样减就是1小时-30分钟,这样当然有负数,算这个一般先要转分钟再算,也就是 int a=xs2*60+fz2-xs1*60-fz1;printf("两个时间相差%d小时%d分钟\\n",a\/60,a%60);
c语言问题,为什么会输出负数
这个问题有多种可能,不一而足。算法有错误,最终计算结果是负数。输出自然会是负数。例如:int a=1;int b=a-2;printf("b=%d",b);\/\/输出结果:b=-1超过变量类型的最大取值范围,发生溢出。例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结...
C语言运行结果的时候为什么会出现负数
必然是溢出了。
C语言基础,这道结果的b为啥是-3,求细解。帮帮我呜呜呜
由此可知,此数为负,负数的计算机表示是补码,是原码取反后加一所得 这里已经知道了补码为11111101,求原码,就是补码减一后,再取反,所以最后的结果为00000011,转为十进制就是3 所以最后的输出结果是-3
c语言的小例子,被除数和被求余数是负数的疑问。
这个问题在C语言早期是没有固定的规定的,所以一些书中会有谁这种行为值不固定,是编译器而决定,但是现在C99中有强制规定了,要求对于整型数a,b,必然满足a%b==a-(a\/b)*b PS,其实这一点在K&R第二版中就有提到
【C语言】有没有大佬知道这个程序为什么会输出一个负数?
程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:include<stdio.h> main(){ long i;i=chengji(...
...int b=65535;printf("%d",b);结果为什么是-1?
主要问题是出在输出控制上,因为你定义的是无符号整数因此16位都用来表示数值,没有符号位,但是你输出处用%d是不对的,%d是用来输出有符号整型数的。因此会将b的值以有符号的形式输出。而65536这个值在16位有符号整数表示中正好是-1.现在基本都是用32位表示整型数了,因此这样写,不会在32位编译...
为什么C语言算出来是负数?大神们帮忙检查一下吧
你的m的初步估计是3的8次方4的8次方乘以2 144194 然后肯定是超出界限了。。int是2个字节。。也就是16位,第一位是数据的正负0正1负,15位是数值最大的值是32767 超出了。。。然后你最后结果的反正是超出范围了。,。最终是哪里超出的就不一定是最后了。。。当你m还在循环的时候就超出了。。
C语言这个问题为什么到一定程度就会出负数?
应该是因为你使用的是有符号数,long在VC6.0中占4个字节,当最高位是1的时候,该long变量就是负数;建议将所有的long类型修改为unsigned long
C语言问题,输出结果总是负数,求教
你定义的类型不一致,前边定义是双精度double的实数,后边输出用的是%f单精度的浮点型,这两个数精度差太多,在C++里double输出用的是%lf,你看看这里是不是,要么把前边类型改成float,要么后边输出改成%lf