Maison >développement back-end >C++ >Pourquoi l'opérateur Modulo produit-il parfois des résultats négatifs ?
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!