首先来介绍一下进行除法时两种取整方式:
1、truncate除法(趋零截尾)
直接舍去小数部分,向0靠齐;
2、floor除法(趋负无穷截尾)
同向下取整相似,取不大于商的第一个整数;
由于好多语言中并没有直接的规定用哪一种截取方式于是就造成了结果不定的情况:
比如会出现这样的情况:
-11 % 5 = -1或4
一般在Python 中采用的是floor除法,所以会有-11/5 = -3 --- 4;
c(c99之后)/Java用truncate除法所以-11 / 5 = -2 --- -1;
至于C++语言的话截尾方式取决于特定的机器。如果两个操作数均为正,那么取模运算的结果也为正数(或为0);如果两个操作数均为负数,那么取模运算的结果为负数(或为0);如果只有一个操作数为负数,那么取模运算的结果是取决于特定实现的。
我用的是c++大家可以看一下输出:(横杠前为商,后为余数;win8 64 QT5.3.2)