Java Mod 示例

10 Sept 2024 | 4 分钟阅读

在 Java 中,mod(或 modulo)是一个用于确定余数的运算符。Java 提供了 Math.floorMod() 方法,可以用来代替 modulo(或 modulus)运算和 % 运算符来执行余数运算。需要注意的是,当数字为正数时,它们的作用相同,但当数字为负数时,它们的行为差异很大。

简而言之:

  • 余数(Remainder)= 结果的符号(+ 或 -)与被除数相同。
  • 模数(Modulo)= 结果的符号(+ 或 -)与除数相同。

Remainder.java

输出

When Divisor is 3: 
 -6 rem 3 = 0
 -5 rem 3 = -2
 -4 rem 3 = -1
 -3 rem 3 = 0
 -2 rem 3 = -2
 -1 rem 3 = -1
  0 rem 3 = 0
  1 rem 3 = 1
  2 rem 3 = 2
  3 rem 3 = 0
  4 rem 3 = 1
  5 rem 3 = 2
  6 rem 3 = 0

When Divisor is -3: 
 -6 rem -3 = 0
 -5 rem -3 = -2
 -4 rem -3 = -1
 -3 rem -3 = 0
 -2 rem -3 = -2
 -1 rem -3 = -1
  0 rem -3 = 0
  1 rem -3 = 1
  2 rem -3 = 2
  3 rem -3 = 0
  4 rem -3 = 1
  5 rem -3 = 2
  6 rem -3 = 0

Modulo.java

输出

When Divisor is 3: 
 -6 mod 3 = 0
 -5 mod 3 = 1
 -4 mod 3 = 2
 -3 mod 3 = 0
 -2 mod 3 = 1
 -1 mod 3 = 2
  0 mod 3 = 0
  1 mod 3 = 1
  2 mod 3 = 2
  3 mod 3 = 0
  4 mod 3 = 1
  5 mod 3 = 2
  6 mod 3 = 0

When Divisor is -3: 
 -6 mod -3 = 0
 -5 mod -3 = -2
 -4 mod -3 = -1
 -3 mod -3 = 0
 -2 mod -3 = -2
 -1 mod -3 = -1
  0 mod -3 = 0
  1 mod -3 = -2
  2 mod -3 = -1
  3 mod -3 = 0
  4 mod -3 = -2
  5 mod -3 = -1
  6 mod -3 = 0

使用 Math.floorMod() 方法

Java Math 类提供了 floorMod() 方法来确定整数参数的模数。该方法接受两个 int 类型的参数(被除数和除数)。该方法返回地板模数 x - (floorDiv(x, y) * y)。

语法

如果除数 (y) 为 0,该方法将抛出 ArithmaticException

请注意,地板模数的符号与除数 y 相同,并且在 -abs(y) < r < +abs(y) 的范围内。floorMod() 和 floorDiv() 之间存在以下关系。

另外,请注意 floorMod()% 运算符并不相同,它们之间存在细微差别。这种差异是由于 floorDiv() 方法,因为它返回一个小于或等于商的整数,而运算符返回最接近的整数。

请记住

  • 如果两个参数具有相同的符号,floorMod() 方法和 % 运算符的结果将相同
  • 如果两个参数具有不同的符号,floorMod() 方法和 % 运算符的结果将不同

例如,考虑以下内容:

  • floorMod(5, 2) == 1; 和 (5 % 2) == 1
  • floorMod(+5, -2) == -1; 和 (+5 % -2) == 1
  • floorMod(-5, +2) == 1; 和 (-5 % +2) == -1
  • floorMod(-5, -2) == -1; 和 (-5 % -2) == -1

如果参数的符号未知,并且我们希望得到一个正模数,我们可以使用以下语句。

FloorModExample.java

输出

3 % -2 = 1
floorMod(3, -2) = -1

注意:选择哪一个,余数 % 还是模数 Math.floorMod()。这取决于您要构建的内容;对于正数,两者都相同,但请记住要处理负数结果,以避免我们上面讨论的常见缺点。

因此,我们可以得出结论:mod 和 remainder 并不相同