Opérateur modulo qui gère les nombres négatifs en C/C /Obj-C
L'opérateur modulo (%) dans les langages basés sur C, lorsqu'il est appliqué à des nombres négatifs, il ne se comporte pas toujours de manière intuitive. En particulier, le résultat peut être négatif, même pour des diviseurs positifs. Ce comportement peut être frustrant, en particulier pour les mathématiciens.
Fonction modulo personnalisée
Pour résoudre ce problème, une fonction modulo personnalisée peut être implémentée pour gérer correctement les nombres négatifs. La fonction suivante utilise le comportement défini par l'implémentation de l'opérateur modulo pour garantir que le résultat est toujours positif :
int mod(int a, int b) { if (b < 0) { return -mod(-a, -b); } int ret = a % b; if (ret < 0) { ret += b; } return ret; }
Cette fonction fonctionne en vérifiant d'abord si le diviseur est négatif. Si c'est le cas, la fonction s'appelle récursivement avec la négation du dividende et du diviseur. Cela garantit que le résultat sera positif.
Ensuite, la fonction calcule le reste de la division à l'aide de l'opérateur modulo. Si le reste est négatif, la fonction ajoute le diviseur au reste pour le rendre positif.
Enfin, la fonction renvoie le résultat.
Utilisation
La fonction mod() peut être utilisée à la place de l'opérateur modulo pour obtenir le comportement souhaité pour les nombres négatifs. Par exemple :
int result = mod(-1, 8); // result is 7 result = mod(13, -8); // result is -3
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!