设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
故:%运算符的结果总是与被除数同号(如果不同号就补不回来了)。
不过这样的证明我感觉不怎么严谨,我也没学高数。。。a%b,b是被除数,我的验证是%运算符的结果总是与除数a同号 gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
我用google计算器算了一下,结果确实如老师所说%运算符的结果总是与被除数同号 我重新验证了一遍,还是如楼上的结果,无法解释,希望老师指点一下
忍不住多说几句 “C99规定,如果a和b是整型,b不等于0,则表达式(a/b)*b+a%b的值总是等于a”和后面的“%运算符的结果总是与被除数同号”是矛盾的 应该是:%运算符的结果总是与除数同号
不能理解。我也用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看了老师我回答我才认识到真理:除号前面的是被除数,后面的是除数 没有问题了,无脸见人。小学学的都忘了
(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将会出现在本书前言的致谢中。再次感谢您的宝贵意见!