Maison > développement back-end > C++ > Pourquoi l'opérateur Modulo (%) se comporte-t-il différemment avec des valeurs négatives dans les langages de type C ?

Pourquoi l'opérateur Modulo (%) se comporte-t-il différemment avec des valeurs négatives dans les langages de type C ?

Patricia Arquette
Libérer: 2024-11-03 18:09:30
original
637 Les gens l'ont consulté

Why Does the Modulo Operator (%) Behave Differently with Negative Values in C-Like Languages?

Comprendre le comportement de l'opérateur modulo avec des valeurs négatives dans les langages de type C

L'opérateur modulo (%) dans les langages dérivés du C, tels que C, C et Obj-C peuvent conduire à des résultats inattendus lorsque vous travaillez avec des nombres négatifs. Cela peut être frustrant, surtout pour ceux qui ont une formation en mathématiques. Dans cette discussion, nous approfondirons le problème et explorerons des solutions pour gérer les valeurs négatives dans l'opération modulo.

Un aspect clé à garder à l'esprit est que l'opération modulo reflète le reste après la division entière. Cependant, pour les nombres négatifs, le signe du reste est défini par l'implémentation, conformément à la norme C. Cette incohérence peut entraîner des résultats surprenants, tels que (-1) % 8 renvoyant -1 au lieu du 7 attendu.

Pour relever ce défi, nous pouvons tirer parti de l'approche suivante :

<code class="c">int mod(int a, int b) {
   if (b < 0) 
     return -mod(-a, -b);
   int ret = a % b;
   if (ret < 0) 
     ret += b;
   return ret;
}</code>
Copier après la connexion

Cette solution prend en charge les opérandes positifs et négatifs. Il garantit que le reste est toujours positif en ajoutant le diviseur si le reste est négatif. En conséquence, mod(-1, 8) renverra 7, tandis que mod(13, -8) renverra -3, offrant un comportement cohérent et intuitif.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal