为什么我在下面得到 2 而不是 -2?
System.out.println(11%-3);
考虑到:
System.out.println(-11%3);
返回 -2..
提前致谢。
为什么我在下面得到 2 而不是 -2?
System.out.println(11%-3);
考虑到:
System.out.println(-11%3);
返回 -2..
提前致谢。
引用JLS:
在二进制数值提升(第 5.6.2 节)之后,整数操作数的余数运算会产生一个结果值,
(a/b)*b+(a%b)
例如a
。
从这个规则可以看出,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。此外,结果的大小总是小于除数的大小。
(强调我的。)
此外,有关各种编程语言中的模运算符的信息,请参阅模运算。
规则在Jls 15.17.3 余数运算符 % -
由这个规则得出,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。此外,结果的大小总是小于除数的大小。
首先,“remainder()”表示:如果 a=b*c+r,a,b,c,r 是整数。那么a%b = c
但是,如何选择c,不同的编程语言有不同的实现。
对于 C 和 Java,余数被计算为截断:
-11 % 3 = 3*(-3)+(-2) 11 % (-3) = (-3)*(-3)+2
关键是为什么选择-3?因为:
截断(-11/3)=截断(-3.66)=-3
"truncate()" 使 int 部分接近 0
在其他编程语言中,如 Python,使用地板除法。这意味着在 Python 中:-11 % 3 = 3 * (floor(-11/3))+2
请参考: http: //python-history.blogspot.sg/2010/08/why-pythons-integer-division-floors.html
这是一道数学题。
第一,-11%3 和 11%-3 是一样的。
2,如果你想要一个正数,请去掉“减号”。试试 11%3 或 -11%-3