负数除法的余数

The remainder obtained from division of negative number

假设被除数为 -4,除数为 3。

根据除法定理(或除法算法),我们有 -4 = -2 * 3 + 2 因此余数为 2。

另一方面,如果我们在 java 中执行 int r = (-4) % 3;,我们会得到 r = -1。我把这个结果理解为先求被除数的绝对值除以除数的余数,然后加上被除数的符号。

请问我的解释是否正确?计算机究竟如何以及为什么以这种方式找到余数?如何理解这两种余数的区别?

可以写-4 = -2 * 3 + 2,也可以写-4 = -1 * 3 - 1。两者都以不同的方式有意义,并且都被不同的语言使用。 Java 选择的选项是为了使余数的符号与左手操作数的符号匹配除法和模数(被除数)。因为-4是负数,所以选择余数-1。

您可以在 JLS 部分阅读更多详细信息 15.17.3:

... the result of the remainder operation can be negative only if the dividend is negative, and can be positive only if the dividend is positive. Moreover, the magnitude of the result is always less than the magnitude of the divisor.