Maison >développement back-end >C++ >Comment l'opérateur Modulo gère-t-il les nombres négatifs ?

Comment l'opérateur Modulo gère-t-il les nombres négatifs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-23 03:10:13574parcourir

How Does the Modulo Operator Handle Negative Numbers?

Comprendre le comportement de l'opérateur modulo avec des valeurs négatives

L'opérateur modulo est connu pour donner des résultats différents lorsqu'il est utilisé avec des opérandes négatifs. Pour approfondir cela, considérons les opérations suivantes :

std::cout << (-7 % 3) << std::endl; // Output: -1
std::cout << (7 % -3) << std::endl; // Output: 1

Justification selon la norme ISO

Selon ISO14882:2011(e) 5.6-4, l'opérateur modulo (%) donne le reste de la division de la première expression par la seconde. Cependant, pour les opérandes intégraux comme dans notre cas, l'opérateur de division (/) effectue une division entière, en ignorant toute partie fractionnaire.

Décomposition mathématique

Décomposons les calculs pour plus de clarté :

  • (-7/3) donne -2, et (-2* 3) vaut -6. Par conséquent, -7 % 3 donne -1, puisque (-6 - (-7)) = -1.
  • (7 / -3) donne -2, et (-2 * -3) est 6. Ainsi, 7 % -3 donne 1, car (6 - 7) = 1.

Défini par la mise en œuvre Comportement

Il est important de noter que lorsque les deux opérandes sont négatifs, le signe du reste est défini par l'implémentation. Cependant, depuis ISO14882:2011(e), le comportement n'est plus explicitement indiqué comme dans son prédécesseur, ISO14882:2003(e).

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