广告

Java取余运算怎么用?%运算符新手入门指南

Java取余运算的基础语义

取余运算符的定义

在 Java 中,取余运算符是 %,用于计算两数相除后的余数。取余的结果的符号与被除数相同,这是理解它与“模”运算的关键差异点,避免在循环和位移等场景中产生误解。

例如,7 % 3 的结果是 1-7 % 3 的结果是 -1。这组规律在多种数据类型上保持一致,帮助你快速判断表达式的结果方向。

int a = 7, b = 3;
int r = a % b;        // 1
System.out.println(r);

与整除运算的关系

在 Java 中,整数除法得到的商会被向零截断,随之再计算 a = b * (a / b) + (a % b),保证等式成立。这一关系可以帮助你在调试时快速推导结果。

对于参与运算的数字符号,结果的符号仍然与被除数(左操作数)一致。因此,当被除数为负数时,取余结果也会是负数,这一点在边界条件判断时尤为重要。

System.out.println(-7 / 3); // -2
System.out.println(-7 % 3);  // -1

%运算符在Java中的用法与示例

整型取余的基本示例

整型取余是最常见的用途之一,用于判断能否整除、以及实现循环模运算等场景。简单来说,x % y 可以告诉你 x 除以 y 后的剩余量。

需要注意的是,当除数为 0 时会抛出 ArithmeticException,所以在执行取余前应先进行除数检查,以避免运行时错误。

int x = 10, y = 4;
int r = x % y;       // 2
System.out.println(r);

浮点数取余的行为

浮点数也可以使用 % 进行取余运算,结果是一个浮点数,遵循 IEEE 754 的模运算规则,例如 7.5 % 2.0 = 1.5。

对于含有 NaN 的运算,结果也是 NaN;当除数为 0.0 时,结果为 NaN,而不是抛出异常。

double d1 = 7.5, d2 = 2.0;
double rf = d1 % d2;   // 1.5
System.out.println(rf);

实际应用场景:循环、环形缓冲、哈希分布等

循环索引的取余

在需要实现环形循环或环形缓冲时,通过取余可以实现对索引的回绕,避免越界访问或复杂的条件分支。

Java取余运算怎么用?%运算符新手入门指南

对于可能的负索引,建议使用一个归一化公式:(idx % n + n) % n,以获得非负的下标值,确保循环的稳定性。

int idx = -1;
int n = 5;
int wrap = (idx % n + n) % n; // 4
System.out.println(wrap);

边界条件与性能注意点

取余运算是 JVM 内部实现较为成熟的指令,但在高频循环中仍需关注性能与可读性。将模运算集中在少量表达式中,有助于提升可维护性

如果你想要一个统一的非负取模方案,可以把逻辑封装成工具方法,以便于在不同模块之间复用,避免重复书写相同的按需处理逻辑。

public static int modNonNegative(int a, int m) {int r = a % m;return r < 0 ? r + m : r;
}
System.out.println(modNonNegative(-3, 5)); // 2

广告

后端开发标签