您的位置:首页 > 编程语言 > C语言/C++

C语言处理除法和取余操作过程

2013-07-31 17:06 239 查看
众所周知,C语言编译器对于除法和取余过程和现实生活中的有差异,例如 3/(-2) = -1, 但是3%(-2) = 1,这是为什么呢?

我们都知道在做除法的时候例如让a除以b,商为q,余数为r,那么这个应该满足以下三个条件:

1、q*b + r = a

2、如果改变了a的正负号,也同时希望改变q的正负号,但是q的绝对值不变化

3、当b>0时,我们希望r>=0 且 r < b

这是小学数学上我们学习到的知识,但是很不幸的是,在做除法运算的时候上面的三个性质有可能不是全部都成立,比如3/2和(-3)/2对比商和余数,即可发现上面三个性质的矛盾所在,对于C语言编译器对于整数除法采用了截断运算,必然要放弃上面三条性质中的一条,大多数语言放弃了第三条,而是改作了余数和除数的符号相同。这样来满足性质一和性质二,至少C语言编译器都是这么做的!

如有错误,欢迎指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: