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

众所周知,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语言编译器都是这么做的!


如有错误,欢迎指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值