Home  >  Article  >  Java  >  Why Does Java\'s Modulus Operator Yield a Negative Result for Negative Numbers?

Why Does Java\'s Modulus Operator Yield a Negative Result for Negative Numbers?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 12:33:29484browse

Why Does Java's Modulus Operator Yield a Negative Result for Negative Numbers?

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn