Maison > Article > développement back-end > Pourquoi l'opérateur Modulo (%) se comporte-t-il différemment avec des valeurs négatives dans les langages de type C ?
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>
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!