Maison >développement back-end >C++ >Comment pouvons-nous gérer correctement les nombres négatifs dans l'indexation de tableaux ?

Comment pouvons-nous gérer correctement les nombres négatifs dans l'indexation de tableaux ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 13:37:44858parcourir

How Can We Correctly Handle Negative Numbers in Array Indexing?

Gestion des nombres négatifs dans l'index du tableau

En programmation, nous avons souvent besoin d'utiliser des index pour accéder aux éléments d'un tableau. Bien que l'opérateur modulo fonctionne bien lorsque l'on travaille avec des nombres positifs, les nombres négatifs peuvent présenter des défis en raison des différences dans la façon dont ils sont traités.

Compréhension de l'arithmétique modulaire

L'opérateur modulo (%) est utilisé pour trouver le reste de la division du premier opérande par le deuxième opérande. Par exemple :

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

Cependant, l'opérateur modulo se comporte différemment lorsqu'il s'agit de nombres négatifs :

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

Cet écart par rapport au comportement attendu provient de l'implémentation sous-jacente de l'opérateur modulo, qui est conçu pour produire un reste non négatif.

Utiliser des nombres négatifs pour l'indexation des tableaux

Pour résoudre cette incohérence et garantir une indexation correcte des tableaux, nous avons besoin d'une fonction modulo personnalisée. Une façon d'y parvenir est la suivante :

<code class="language-c++">int mod(int x, int m) {
    return (x%m + m)%m;
}</code>

Cette fonction calcule d'abord le reste puis ajoute la longueur du tableau si le reste est négatif. Cela garantit que l'index souhaité dans le tableau est renvoyé même pour les valeurs négatives.

Une autre façon d'optimiser le nombre d'opérations modulaires est :

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

Cette version utilise des instructions conditionnelles au lieu d'opérations modulo supplémentaires pour obtenir le même résultat.

En utilisant ces fonctions modulo personnalisées, vous pouvez gérer efficacement les nombres négatifs dans les index de tableau, vous assurant ainsi d'obtenir les résultats souhaités.

Exemple de mise en œuvre

À l'aide d'une fonction modulo personnalisée, l'extrait de code suivant montre comment indexer correctement un tableau avec des nombres négatifs :

<code class="language-c++">int GetArrayIndex(int i, int arrayLength) {
    return mod(i, arrayLength);
}

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</code>

Avec cette compréhension améliorée et cette fonction modulo personnalisée, les nombres négatifs ne constitueront plus une menace pour l'indexation précise des tableaux.

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