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


如有错误,欢迎指正!

你可能感兴趣的:(C语言)