C99 dit dans la section 6.5.5 opérateurs multiplicatifs (mine gras):
Le résultat de l'opérateur /
est le quotient de la division du premier opérande par le second; le résultat de l'opérateur %
est le reste. Dans les deux opérations, si la valeur de le deuxième opérande est zéro, le comportement est indéfini.
Lorsque des entiers sont divisés, le résultat de l'opérateur /
est le quotient algébrique avec toute partie fractionnelle mise au rebut. Si le quotient a/b
est représentable, l'expression (a/b)*b + a%b
doit être égale à a
.
Il est dit que %
est le reste et n'utilise pas le mot "module" pour le décrire. En fait, le mot "module" n'apparaît qu'à trois endroits dans ma copie de C99, et ceux-ci se rapportent tous à la bibliothèque et non à un opérateur.
Il ne dit rien qui exige que le reste soit positif. Si un reste positif est requis, la réécriture a%b
comme (a%b + b) % b
fonctionnera pour le signe a
et b
et donnera une réponse positive au détriment d'une addition et division supplémentaire. Il peut être moins cher de le calculer en m=a%b; if (m<0) m+=b;
selon que les branches manquées ou les divisions supplémentaires sont moins chères dans votre architecture cible.
Édition: Je ne connais rien à Objective-C. Votre question originale a été marquée C et toutes les réponses à ce jour reflètent le langage C, bien que votre exemple semble être le code Objective-C. Je suppose que savoir ce qui est vrai à propos de C est utile.
'%' se comporte différemment de ce que vous attendez pour les entrées négatives dans C et Objective-C - voir cette question SO précédente: http://stackoverflow.com/questions/2430737/modulo-operator-in-objective-c-returns -le-mauvais-résultat –
Probablement doit être fermé comme doublon: http://stackoverflow.com/questions/2430737/modulo-operator-in-objective-c-returns-the-wrong-result –