Java Modulus Calculations with Negative Numbers
In Java, the modulus operator (%) calculates the remainder after division. However, the treatment of negative numbers in modulus calculations can be confusing.
The Problem
A user encountered a discrepancy in the result of "-13 % 64" in Java, expecting the result to be 51 but instead obtaining -13. They questioned if their implementation of modulus was incorrect.
The Explanation
Java follows the mathematical definition of modulus for negative numbers, which can differ from other programming languages. In most cases, the modulus of a negative number is defined as:
a % b = a - (floor(a / b) * b)
For example, in the case of "-13 % 64":
-13 - (floor(-13 / 64) * 64) = -13 - (-1 * 64) = -13 + 64 = -13
Possible Solutions
If the desired result is a positive number for negative inputs, it can be obtained with this modification:
<code class="java">int r = x % n; if (r > 0 && x < 0) { r -= n; }</code>
Conversely, if the desired result is a negative number for negative inputs, the following modification can be used:
<code class="java">int r = x % n; if (r < 0) { r += n; }</code>
These modifications adjust the result based on the sign of the input and the desired result.
The above is the detailed content of Why Does Java's Modulus Operator Yield a Negative Result for Negative Numbers?. For more information, please follow other related articles on the PHP Chinese website!