0

为什么我在下面得到 2 而不是 -2?

System.out.println(11%-3);

考虑到:

System.out.println(-11%3);

返回 -2..

提前致谢。

4

5 回答 5

3

引用JLS

在二进制数值提升(第 5.6.2 节)之后,整数操作数的余数运算会产生一个结果值, (a/b)*b+(a%b)例如a


从这个规则可以看出,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。此外,结果的大小总是小于除数的大小。

(强调我的。)

此外,有关各种编程语言中的模运算符的信息,请参阅模运算。

于 2013-08-29T07:48:03.323 回答
1

规则在Jls 15.17.3 余数运算符 % -

由这个规则得出,余数运算的结果只有当被除数为负时才能为负,只有当被除数为正时才能为正。此外,结果的大小总是小于除数的大小。

于 2013-08-29T07:50:07.693 回答
0

因为结果的符号等于被除数的符号。 http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.17.3

于 2013-08-29T07:53:28.177 回答
0

首先,“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

于 2013-08-29T08:19:38.267 回答
-3

这是一道数学题。

第一,-11%3 和 11%-3 是一样的。

2,如果你想要一个正数,请去掉“减号”。试试 11%3 或 -11%-3

于 2013-08-29T07:46:35.817 回答