Maison  >  Article  >  Java  >  Pourquoi l'opérateur de module Java donne-t-il un résultat négatif pour les nombres négatifs ?

Pourquoi l'opérateur de module Java donne-t-il un résultat négatif pour les nombres négatifs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 12:33:29484parcourir

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

Calculs de module Java avec des nombres négatifs

En Java, l'opérateur de module (%) calcule le reste après division. Cependant, le traitement des nombres négatifs dans les calculs de module peut prêter à confusion.

Le problème

Un utilisateur a rencontré un écart dans le résultat de "-13 % 64" dans Java, s'attendant à ce que le résultat soit 51 mais obtenant à la place -13. Ils se sont demandé si leur implémentation du module était incorrecte.

L'explication

Java suit la définition mathématique du module pour les nombres négatifs, qui peut différer des autres langages de programmation. Dans la plupart des cas, le module d'un nombre négatif est défini comme :

a % b = a - (floor(a / b) * b)

Par exemple, dans le cas de "-13 % 64" :

-13 - (floor(-13 / 64) * 64)
= -13 - (-1 * 64)
= -13 + 64
= -13

Possible Solutions

Si le résultat souhaité est un nombre positif pour des entrées négatives, il peut être obtenu avec cette modification :

<code class="java">int r = x % n;
if (r > 0 && x < 0) {
    r -= n;
}</code>

À l'inverse, si le résultat souhaité est un nombre négatif pour entrées négatives, la modification suivante peut être utilisée :

<code class="java">int r = x % n;
if (r < 0) {
    r += n;
}</code>

Ces modifications ajustent le résultat en fonction du signe de l'entrée et du résultat souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn