c语言的小例子,被除数和被求余数是负数的疑问。
#include<stdio.h>inta,b,c,d;intmain(){a=5/-3;/*被除数是负数,结果为负数*/printf("a=%d\n",a);b=-5/...
#include<stdio.h>
int a,b,c,d;
int main()
{
a=5/-3; /* 被除数是负数,结果为负数*/
printf("a=%d\n",a);
b=-5/-3; /* 被除数是负数,除数是负数,负负得正,结果为正数*/
printf("b=%d\n",b);
c=5%-3; /* 被求余数是负数,结果为负数*/
printf("c=%d\n",c);
d=-5%-3; /* 被求余数是负数,余数也是负数,负负得正,结果为正数*/
printf("d=%d\n",d);
}
/*得出的结果是a=-1,b=1,c=2,d=-2,c和d的答案怎么会这样,不知道是哪里操作错误了*/
请大侠指点迷津下,谢谢了。 展开
int a,b,c,d;
int main()
{
a=5/-3; /* 被除数是负数,结果为负数*/
printf("a=%d\n",a);
b=-5/-3; /* 被除数是负数,除数是负数,负负得正,结果为正数*/
printf("b=%d\n",b);
c=5%-3; /* 被求余数是负数,结果为负数*/
printf("c=%d\n",c);
d=-5%-3; /* 被求余数是负数,余数也是负数,负负得正,结果为正数*/
printf("d=%d\n",d);
}
/*得出的结果是a=-1,b=1,c=2,d=-2,c和d的答案怎么会这样,不知道是哪里操作错误了*/
请大侠指点迷津下,谢谢了。 展开
5个回答
展开全部
这个问题在C语言早期是没有固定的规定的,所以一些书中会有谁这种行为值不固定,是编译器而决定,但是现在C99中有强制规定了,要求对于整型数a,b,必然满足a%b==a-(a/b)*b
PS,其实这一点在K&R第二版中就有提到
PS,其实这一点在K&R第二版中就有提到
更多追问追答
追问
c=5%-3;,是不是这一段不适用,我用的是vc++6.0
追答
你大概误会我的意思了
我说的C99规定的是强制在对于负数除法时使用"趋零截尾"的方式计算
即5/-3==-1
虽然在此之前绝大多数编译器对此的做法都是趋零截尾的,但是毕竟标准里没有强制要求,还是有些编译器,使用的还是四舍五入的形式方式处理负数除法
vc6是典型的趋零截尾的,满足
2==5-(-1)*(-3)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
5%-3:(-3)*(-1)+2
-5%-3:(-3)*(1)-2
总之,商和除数乘积要与被除数符号一致。
-5%-3:(-3)*(1)-2
总之,商和除数乘积要与被除数符号一致。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个必须把负号提在最前面。如a=(-)5/3
追问
a=(-)5/3,这条运行不了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己搞错了吧!
追问
哪个地方错了呢,请指点笑傲
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询