>第 4 章 分支语句>if/else语句

Laciq dd@qq.com
2009-10-04 22:49:57

设a=-3, b=-2,则
(a/b)*b+a%b=(-3/(-2))*(-2)+(-3)%(-2)=-3

(-3/(-2))*(-2)=-2
∵(-3/(-2))*(-2)+(-3)%(-2)=-3
∴(-3)%(-2)=-3-(-3/(-2))
  即(-3)%(-2)=-3-(-2)
             =-1
故:%运算符的结果总是与被除数同号(如果不同号就补不回来了)。
不过这样的证明我感觉不怎么严谨,我也没学高数。。。


王雪 giveareport@126.com
2010-07-03 10:16:07

a%b,b是被除数,我的验证是%运算符的结果总是与除数a同号
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)


王雪 giveareport@126.com
2010-07-03 10:31:10

我用google计算器算了一下,结果确实如老师所说%运算符的结果总是与被除数同号
我重新验证了一遍,还是如楼上的结果,无法解释,希望老师指点一下


王雪 giveareport@126.com
2010-07-03 10:45:41

忍不住多说几句
“C99规定,如果a和b是整型,b不等于0,则表达式(a/b)*b+a%b的值总是等于a”和后面的“%运算符的结果总是与被除数同号”是矛盾的
应该是:%运算符的结果总是与除数同号


宋劲杉 songjinshan@gmail.com
2010-07-05 13:50:19

不能理解。我也用gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)试过了,结果确实与被除数同号。

int main(void)
{
	printf("%d %d\n", 13/(-4), 13 % (-4));
	return 0;
}

结果是-3 1


王雪 giveareport@126.com
2010-07-05 19:40:02

看了老师我回答我才认识到真理:除号前面的是被除数,后面的是除数

没有问题了,无脸见人。小学学的都忘了


sd44 sd44sd44@yeah.net
2011-02-16 12:00:51

(a/b)*b+a%b = a 
可知:
a%b= a - (a/b)*b

当a为正数时,
(a/b)*b <= a
则a%b >= 0,与a同号

当a为负数时,
(a/b)*b > a
a- (a/b)*b < 0
则a%b < 0
与a同号

所以a%b与a两者同号


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!