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

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

Susan Sarandon
Libérer: 2024-11-03 04:11:02
original
978 Les gens l'ont consulté

How Does the Modulo Operator Handle Negative Numbers in C/C  /Obj-C?

Opérateur Modulo gérant les nombres négatifs en C/C /Obj-C

En C, C et Obj-C, l'opérateur modulo (%) renvoie le reste d'une opération de division. Cependant, cela peut donner des résultats inattendus lorsque des nombres négatifs sont impliqués. Plus précisément, (-1) % 8 est évalué à -1 au lieu de 7. Ce comportement peut être frustrant pour les programmeurs qui s'attendent à une interprétation cohérente de l'opérateur modulo.

Comprendre le problème

L'opérateur modulo est défini comme suit : x % y = x - (x/y) * y. Si les deux opérandes sont positifs, le reste sera positif. Cependant, si un ou les deux opérandes sont négatifs, le comportement est défini par l'implémentation. Cela signifie que différents compilateurs et environnements d'exécution peuvent produire des résultats différents.

Solution de gestion des nombres négatifs

Pour garantir un comportement cohérent lors de la gestion des nombres négatifs, vous pouvez utiliser ce qui suit function :

<code class="c++">int mod(int a, int b) {
    if (b < 0) { // Check if the divisor is negative
        return -mod(-a, -b); // Recursively call mod with both operands negated
    }

    int ret = a % b;
    if (ret < 0) {
        ret += b; // Adjust the remainder if it's negative
    }

    return ret;
}</code>
Copier après la connexion

Cette fonction gère correctement les dividendes et diviseurs négatifs. Par exemple, mod(-1, 8) renvoie 7 et mod(13, -8) renvoie -3.

Considérations supplémentaires

Alors que le mod() La fonction gère correctement les nombres négatifs, il convient de noter qu'elle peut ne pas être prise en charge par tous les compilateurs ou environnements d'exécution. Si la portabilité est un problème, vous devrez peut-être vérifier explicitement les opérandes négatifs et ajuster le calcul en conséquence.

En utilisant la fonction mod() ou en gérant manuellement les opérandes négatifs, vous pouvez vous assurer que l'opérateur modulo se comporte de manière cohérente dans votre code C, C ou Obj-C, quelles que soient les valeurs de l'opérande.

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