Java模块算术

时间:2013-01-21 19:38:57

标签: java

  

可能重复:
  Mod in Java produces negative numbers

当我尝试打印-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);

}

}

2 个答案:

答案 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)

当第一个操作数为负数时,余数运算符%返回否定结果。这是许多语言中的常见行为。