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的答案怎么会这样,不知道是哪里操作错误了*/

请大侠指点迷津下,谢谢了。
展开
 我来答
1239388231
2013-10-13 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:104万
展开全部
操作符‘/’和‘%’代表整除和取余:若x和y都是正整数时x/y和x%y的结果都容易确定;但当x和y有负数时,结果就和具体的机器有关,但必有满足x=(x/y)*y+x%y。

所以c=5%-3=5-(5/-3)*(-3)=5+1*(-3)=2
d=-5%-3=-5-(-5/-3)*(-3)=-5-1*(-3)=-5+3=-2
追问
我想得出 5%-3,应该怎么样用C语言里面的公式表达呢
shine1991
科技发烧友

推荐于2017-11-26 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
这个问题在C语言早期是没有固定的规定的,所以一些书中会有谁这种行为值不固定,是编译器而决定,但是现在C99中有强制规定了,要求对于整型数a,b,必然满足a%b==a-(a/b)*b
PS,其实这一点在K&R第二版中就有提到
更多追问追答
追问
c=5%-3;,是不是这一段不适用,我用的是vc++6.0
追答
你大概误会我的意思了
我说的C99规定的是强制在对于负数除法时使用"趋零截尾"的方式计算
即5/-3==-1
虽然在此之前绝大多数编译器对此的做法都是趋零截尾的,但是毕竟标准里没有强制要求,还是有些编译器,使用的还是四舍五入的形式方式处理负数除法
vc6是典型的趋零截尾的,满足
2==5-(-1)*(-3)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
种烧饼的怪叔叔
2013-10-13 · TA获得超过2214个赞
知道小有建树答主
回答量:824
采纳率:65%
帮助的人:451万
展开全部
5%-3:(-3)*(-1)+2
-5%-3:(-3)*(1)-2
总之,商和除数乘积要与被除数符号一致。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuanwei199211
2013-10-13 · TA获得超过428个赞
知道答主
回答量:43
采纳率:0%
帮助的人:19.3万
展开全部
这个必须把负号提在最前面。如a=(-)5/3
追问
a=(-)5/3,这条运行不了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
987846224
2013-10-13
知道答主
回答量:1
采纳率:0%
帮助的人:1451
展开全部
自己搞错了吧!
追问
哪个地方错了呢,请指点笑傲
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式