Maison > développement back-end > C++ > Comment gérer les nombres négatifs dans les opérations modulo en C/C/Obj-C ?

Comment gérer les nombres négatifs dans les opérations modulo en C/C/Obj-C ?

DDD
Libérer: 2024-11-02 23:10:29
original
869 Les gens l'ont consulté

How to Handle Negative Numbers in Modulo Operations in C/C  /Obj-C?

Gestion des nombres négatifs dans les calculs modulo en C/C/Obj-C

Dans les langages basés sur C, les opérations modulo utilisant le "% " L'opérateur peut présenter des comportements inattendus lorsqu'il traite des nombres négatifs. Plus précisément, le résultat peut être différent de celui des opérations mathématiques modulo.

Explication du problème

En tant que concept mathématique, la division modulo renvoie le reste lorsqu'un nombre est divisé par un autre. Cependant, dans C/C /Obj-C, l'opérateur modulo privilégie la préservation du signe du dividende (le premier opérande) plutôt que d'assurer un reste positif. Cela peut conduire à des résultats négatifs même lorsque la division mathématique donnerait un reste positif.

Par exemple, considérons l'expression "(-1) % 8". Mathématiquement, cela devrait renvoyer 7 car 8 entre une fois dans -1 avec un reste de 7. Cependant, en C/C , le résultat serait -1 car il conserve le signe du dividende.

Solution avec considérations de mise en œuvre

Pour remédier à cette situation, une version révisée de l'opérateur modulo peut être implémentée pour tenir compte des nombres négatifs :

<code class="c++">int customMod(int a, int b) {
  if (b < 0) {
    return -customMod(-a, -b);
  }

  int ret = a % b;
  if (ret < 0) {
    ret += b;
  }

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

Dans cette version optimisée, si l'on des opérandes est négatif, il inverse les signes des deux et invoque l'opérateur modulo personnalisé de manière récursive. Après avoir calculé le reste, il vérifie s'il est négatif et ajoute le diviseur pour le rendre positif. Cela garantit que le résultat final conserve le reste mathématique correct. Par exemple, customMod(-1, 8) renverrait 7, tandis que customMod(13, -8) renverrait -3.

Dans l'ensemble, cet opérateur modulo révisé gère efficacement les nombres négatifs et produit des résultats qui correspondent aux mathématiques. attentes modulo.

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