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

本文深入探讨了C语言编译器在进行整数除法和取余运算时的独特规则,解释了为何会出现与数学理论不符的现象,如3/(-2)=-1而3%(-2)=1。文章详细分析了C语言编译器采用的截断运算方式,以及这一方式如何使得除法和取余满足数学运算的基本性质之一。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值