java 中的取模运算符 % 遵循“同号规则”,即结果的符号与被除数(左操作数)的符号保持一致,这与数学上的模运算不同。具体做法是直接使用 % 运算符,例如 -7 % 3 的结果为 -1,而 7 % -3 的结果为 1。这种处理方式基于整数除法向零截取的特性,余数的计算逻辑为 a = (a / b) * b + (a % b),因此当被除数为负时,余数也为负。

正数与负数混合运算时的结果规律
在 Java 中,无论除数是正还是负,取模结果的符号始终由被除数决定。这意味着 % 运算符实际上执行的是“求余”而非严格意义上的“模”。例如,-10 % 3 得到 -1,而 10 % -3 得到 1。这种行为在处理循环索引或哈希计算时需要特别注意,因为它可能导致负数索引或负数哈希值,进而引发数组越界或逻辑错误。

public class ModuloDemo {
public static void main(String[] args) {
System.out.println(-10 % 3); // 输出: -1
System.out.println(10 % -3); // 输出: 1
System.out.println(-10 % -3); // 输出: -1
System.out.println(10 % 3); // 输出: 1
}
}
如何获取数学意义上的非负模结果
如果需要获得数学定义上非负的模结果(即结果范围在 [0, |b|-1] 之间),不能直接依赖 % 运算符,而需要进行后处理。具体做法是先计算 a % b,如果结果为负数,则加上除数的绝对值 |b|。例如,对于 -10 % 3,先得到 -1,然后加上 3,最终结果为 2。这种方法确保了结果始终为非负,符合大多数算法和数学场景的需求。

positiveMod
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











