Par exemple,
int result;
result = 125/100;
ou
result = 43/100;
Le résultat sera-t-il toujours le sol de la division? Quel est le comportement défini?
Le résultat sera-t-il toujours le sol de la division? Quel est le comportement défini?
Oui, quotient entier des deux opérandes.
6.5.5 Opérateurs multiplicatifs
6 Lorsque les entiers sont divisés, le résultat de l'opérateur/est le quotient algébrique, toute partie décimale étant ignorée.88) Si le quotient a/b est représentable, l'expression (a/b) * b + a% b doit être égale à a.
et la note de bas de page correspondante:
88) On l’appelle souvent ‘‘ troncature vers zéro ’’.
Bien sûr, deux points à noter sont:
Les conversions arithmétiques habituelles sont effectuées sur les opérandes.
et:
5 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 le deuxième opérande a la valeur zéro, le comportement est indéfini.
[Note: Souligne moi]
Dirkgently donne ne excellente description de la division entière en C99, mais vous devez également savoir qu'en C89, la division entière avec un opérande négatif a un sens défini par la mise en oeuvre.
Extrait du brouillon ANSI C (3.3.5):
Si l'un des opérandes est négatif, que le résultat de l'opérateur/soit le plus grand nombre entier inférieur au quotient algébrique ou que le plus petit entier supérieur au quotient algébrique soit défini par l'implémentation, comme le signe du résultat de l'opérateur%. Si le quotient a/b est représentable, l'expression (a/b) * b + a% b doit être égale à a.
Alors surveillez les nombres négatifs lorsque vous êtes coincé avec un compilateur C89.
C99 est un fait amusant que C99 a choisi la troncature vers zéro car c’est ainsi que FORTRAN l’a fait. Voir ce message sur comp.std.c.
Lorsque le résultat est négatif, C tronque vers 0 plutôt que sur le sol. J'ai appris cette lecture sur la raison pour laquelle Python division entière toujours les étages ici: Pourquoi les planchers de division entière de Python
Oui, le résultat est toujours tronqué vers zéro. Il arrondira à la plus petite valeur absolue.
-5 / 2 = -2
5 / 2 = 2
Pour les valeurs signées non signées et non négatives, il s'agit de la même chose que floor (arrondi à -Infinity).
Le résultat sera-t-il toujours le sol de la division?
Non, le résultat varie, mais la variation ne se produit que pour les valeurs négatives.
Quel est le comportement défini?
Pour que le sol soit bien arrondi à l'infini négatif, alors que la division entière est arrondie à zéro (tronquée)
Pour les valeurs positives, ce sont les mêmes
int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0
Pour la valeur négative c'est différent
int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0