Domanda

Ad esempio,

int result;

result = 125/100;

o

result = 43/100;

Sarà risultare sempre il pavimento della divisione? Qual è il comportamento definito?

È stato utile?

Soluzione

  

Sarà risultare sempre il pavimento della divisione? Qual è il comportamento definito?

Sì, integer quoziente dei due operandi.

  

6.5.5 Operatori moltiplicativi

     

6 Quando interi sono divisi, il risultato dell'operatore / è il quoziente algebrica con qualsiasi   parte frazionaria scartato. 88) Se il quoziente a / b è rappresentabile, l'espressione   (A / b) * b + a b% è uguale a.

e la nota corrispondente:

  

88) Questo è spesso chiamato ‘‘il troncamento verso lo zero’’.

Naturalmente due punti da notare sono:

  

3 I normali conversioni aritmetiche vengono eseguite sui operandi.

e

  

5 Il risultato dell'operatore / è il   quoziente dalla divisione della   primo operando dal secondo; il   risultato dell'operatore% è il   resto. In entrambe le operazioni, se il   valore del secondo operando è zero,   il comportamento è indefinito.

[Nota: l'enfasi è mia]

Altri suggerimenti

una descrizione eccellente di divisione intera in C99, ma si dovrebbe anche sapere che in C89 divisione intera con un negativo operando ha un senso definito dall'implementazione.

Dal progetto ANSI C (3.3.5):

  

Se uno degli operandi è negativo, se il risultato dell'operatore / è il più grande intero minore del quoziente algebrico o piccolo maggiore numero intero del quoziente algebrico è definito dall'implementazione, come è il segno del risultato dell'operatore% . Se il quoziente a / b è rappresentabile, l'espressione (a / b) * b + a b% è uguale a.

Quindi attenzione con numeri negativi quando si è bloccato con un compilatore C89.

E 'un divertente fatto che C99 ha scelto troncamento verso lo zero perché era come FORTRAN ha fatto. Vedere questo messaggio su comp.std.c.

Se il risultato è negativo, tronca C verso 0 piuttosto che Parquet - ho imparato questa lettura sul perché la divisione intera Python sempre piani qui: Integer Divisione pavimenti di Perché Python

Sì, il risultato è sempre troncato a zero. Sarà rotonda verso il più piccolo valore assoluto.

-5 / 2 = -2
 5 / 2 =  2

Per valori con segno senza segno e non negativi, questo è lo stesso piano (arrotondamento verso -Infinity).

  

Sarà risultare sempre il pavimento della divisione?

No. Il risultato varia, ma la variazione avviene solo per valori negativi.

  

Qual è il comportamento definito?

Per rendere chiaro turni piano verso l'infinito negativo, mentre giri divisione intero verso zero (tronca)

Per valori positivi sono la stessa

int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0

Per valore negativo questo è diverso

int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top