270 votes

Quel est le comportement de la division entière en C?

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?

227voto

dirkgently Points 56879

Résultat sera toujours le sol de la division? Quelle est la définition de comportement?

Oui, le quotient entier de deux opérandes.

6.5.5 Multiplicatif opérateurs

6 Lorsque les entiers sont divisés, le résultat de l'opérateur / est algébrique quotient avec tout partie fractionnaire jeté.88) Si le quotient a/b est représentable, l'expression (a/b)*b + a%b est égal à un.

et la note de bas de page:

88) Ceci est souvent appelé la ‘troncature vers zéro".

Bien sûr, les deux points à noter sont les suivants:

3 L'habitude de l'arithmétique conversions sont effectuées sur les opérandes.

et:

5 Le résultat de l'opérateur / est le le quotient de la division de la premier opérande par le second; le résultat de l'opérateur % est le reste. Dans les deux cas, si l' la valeur de la deuxième opérande est égal à zéro, le comportement est indéfini.

[Note: c'est moi qui souligne]

53voto

schot Points 5809

Dirkgently donne une excellente description de la division entière en C99, mais vous devez également savoir que C89 division entière avec un négatif opérande a une mise en œuvre définies par la direction.

Du C ANSI projet (3.3.5):

Si l'un des deux opérandes est négatif, si le résultat de l'opérateur / est le plus grand entier inférieur à la algébrique quotient ou le plus petit entier plus grand que le algébrique quotient de la mise en œuvre est définie, comme c'est le signe du résultat de l'opérateur%. Si le quotient a/b est représentable, l'expression (a/b)*b + a%b est égal à un.

Donc attention avec les nombres négatifs lorsque vous êtes coincé avec un C89 compilateur.

C'est un fait amusant que C99 a choisi de troncature vers zéro, car c'était comment FORTRAN fait. Voir ce message sur comp.std.c.

38voto

Leonid Points 3494

Oui, le résultat est toujours étage de la division des entiers positifs. Il arrondit vers la plus petite valeur absolue.

27voto

Gareth Williams Points 323

Lorsque le résultat est négatif, C tronque vers 0 au lieu de plancher - j’ai appris cette lecture sur pourquoi la division (entière) Python toujours planchers ici : Pourquoi Python entier Division planchers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X