Maison > développement back-end > C++ > Pourquoi l'opérateur Modulo produit-il parfois des résultats négatifs ?

Pourquoi l'opérateur Modulo produit-il parfois des résultats négatifs ?

DDD
Libérer: 2024-12-15 20:57:14
original
844 Les gens l'ont consulté

Why Does the Modulo Operator Sometimes Produce Negative Results?

Pourquoi les opérations modulo produisent des résultats négatifs

L'opérateur modulo (%) calcule le reste après avoir divisé le premier opérande (a) par le deuxième opérande (b). Cependant, comprendre pourquoi des valeurs négatives peuvent apparaître dans certaines opérations modulo nécessite d'approfondir les détails du comportement de l'opérateur.

La norme ISO14882:2011(e) 5.6-4 stipule : "Pour les opérandes intégraux, l'opérateur / donne le quotient algébrique avec toute partie fractionnaire rejetée". Cela implique que le quotient (a/b) est un entier sans partie fractionnaire. De plus, "si le quotient a/b est représentable dans le type du résultat, (a/b)*b a%b est égal à a".

Considérons l'opération (-7 % 3). Le quotient (-7 / 3) est -2, puisqu'il élimine toute partie fractionnaire (-7,0 / 3,0 donnerait -2,33, mais nous ne gardons que la partie entière). En multipliant le quotient par le diviseur (-2 * 3 = -6) et en ajoutant le résultat au reste (a%b), nous obtenons (-6) (-1) = -7, correspondant à la valeur d'origine.

Maintenant, examinons (7% -3). Le quotient (7 / -3) est également -2, mais le signe du reste a%b est défini par l'implémentation selon la norme ISO14882:2011(e). Dans ce cas, certaines implémentations choisissent un signe négatif, ce qui donne 1.

Par conséquent, le comportement de l'opération modulo avec des opérandes négatifs dépend de l'implémentation et peut produire des restes positifs ou négatifs. Cependant, la norme garantit que la valeur originale peut toujours être reconstituée à partir du quotient et du reste dans certaines conditions.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal