当我尝试打印-16 mod 57时,我应该得到41.但是,我一直得到-16作为我的答案。是什么赋予了?
这是我的代码:
public class TestMod {
public static void main(String[] args) {
int number = -16;
int mod = 57;
int answer = number%mod;
System.out.println(answer);
}
}
答案 0 :(得分:11)
来自JLS:
二进制数字提升(第5.6.2节)后整数操作数的余数运算产生的结果值使得(a / b)* b +(a%b)等于a。
替换示例中的数字,您会看到-16
符合语言规范要求。
即使在特殊情况下,这种认同仍然存在,即被除数是其类型的最大可能量值的负整数,除数为-1(余数为0)。
从这个规则可以得出,只有当被除数为负时,余数运算的结果才可以是负数,只有在被除数为正数时才能为正。此外,结果的大小总是小于除数的大小。
以下是如何获得您期望的结果:
public static void main(String[] args) {
int number = -16;
int mod = 57;
int answer = ((number % mod) + mod) % mod;
System.out.println(answer);
}
答案 1 :(得分:3)
当第一个操作数为负数时,余数运算符%
返回否定结果。这是许多语言中的常见行为。