版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/90172391
取余运算和取模运算类似但是不同。同样的A%B,设C是A和B的商,即A=B*C。
C如果是整数,说明A和B整除,取余运算和取模运算都是0。
C如果是小数(绝大部分是这种情况),则看C是大于0还是小于0,如果大于0则取余运算和取模运算结果一样,如果小于0,则有不同,这是因为取余运算和取模运算的机制不同。
对于C的取整,取余运算是向0取整,取模运算是向负无穷取整。所以取余运算是直接去掉小数部分,取模运算是比C小的最大整数。如C为1.23,则取余运算和取模运算都是去掉小数,取1。如C为-1.23,取余运算去掉小数,取-1,取模运算取小于-1.23的最大整数-2。C一旦确定,则取余运算或取模运算的值也出来了。
在数轴上说,对X向0取整,指的是X向0方向遇到的第一个整数。同样的,对X向负无穷取整,指的是X向负无穷方向上遇到的第一个整数。所以向0取整就是直接去掉小数部分,向负无穷取整是取小于X的最大整数。
经归纳,得知:取余运算的值的符号跟随A,取模运算的符号跟随B。
A值 | B值 | 取余运算 | 取模运算 |
正 | 正 | 正 | 正 |
正 | 负 | 正 | 负 |
负 | 负 | 负 | 负 |
负 | 正 | 负 | 正 |
下图左为java,右为python。
附注:正负号不是直接加上的,如-7%4,在python是取模,查上表得知符号为正,其值为1,在java是取余,查上表得知符号为负,其值为-3。所以这个正负号的变化,是加上或减去B(此处-7%4的B是4)得到的。
独孤尚良dugushangliang——著