Maison >développement back-end >C++ >Comment gérer correctement les opérations modulo négatives ?

Comment gérer correctement les opérations modulo négatives ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-13 13:22:43605parcourir

How Do I Handle Negative Modulo Operations Correctly?

Naviguer les défis du module négatif

L'opérateur modulo (%) peut être délicat lorsqu'il s'agit de nombres négatifs. Bien qu'il renvoie en douceur le reste des entiers positifs, son comportement avec les nombres négatifs prête souvent à confusion. Cet opérateur fournit le reste après division.

Le problème du module négatif

Considérons un tableau d'une longueur de 3 :

<code>i % 3 =
4 -> 1
3 -> 0
2 -> 2
1 -> 1
0 -> 0
-1 -> -1
-2 -> -2
-3 -> 0
-4 -> -1</code>

Remarquez comment les restes négatifs restent négatifs, contrairement à leurs homologues positifs qui parcourent la plage positive.

Une solution pour le module négatif

Pour garantir que les nombres négatifs se comportent comme prévu (retournement), une fonction personnalisée est nécessaire :

<code class="language-c++">int GetArrayIndex(int i, int arrayLength) {
    int r = i % arrayLength;
    return (r < 0) ? (r + arrayLength) : r;
}</code>

Comment ça marche

Cette fonction ajoute intelligemment arrayLength au reste (r) uniquement si r est négatif. Cela « enveloppe » le reste négatif dans la plage positive, imitant le comportement modulo souhaité.

Application pratique

Testons la fonction avec notre tableau à 3 éléments :

GetArrayIndex( 4, 3) -> 1 GetArrayIndex( 3, 3) -> 0 GetArrayIndex( 2, 3) -> 2 GetArrayIndex( 1, 3) -> 1 GetArrayIndex( 0, 3) -> 0 GetArrayIndex(-1, 3) -> 2 GetArrayIndex(-2, 3) -> 1 GetArrayIndex(-3, 3) -> 0 GetArrayIndex(-4, 3) -> 2

Cette fonction personnalisée gère efficacement les opérations modulo négatives, fournissant des résultats cohérents et prévisibles. Vous pouvez désormais travailler en toute confiance avec un modulo négatif sans rencontrer de comportement inattendu.

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