Oppure

Loading
29/05/05 20:14
Damiano
Qualcuno mi sa spiegare questa anomalia in C?
int a=5, b=2; float x=a/b;
printf("%f",x);
Il valore visualizzato ? 2 !! Perch? non 2,5 ?
aaa
29/05/05 22:18
Zizzius
L'operatore di assegnamento (=) va da destra a sinistra, vale a dire valuta prima ci? che c'? a destra e il risultato lo assegna alla variabile di sinistra.
Valutiamo dunque ci? che c'? a destra: si tratta di una divisione tra interi e come tale produce un risultato intero; questo risultato intero viene quindi assegnato alla variabile di sinistra (a qualunque tipo appartenga).

Come risolvere dunque il tuo problema? (non ? un'anomalia!)
Il C fornisce il cosidetto operatore di conversione. Vediamo la sintassi, rifacendoci al tuo esempio:
float x = (float) a / b;
in questo modo, il compilatore effettuer? una temporanea conversione del valore di a, che da 5 viene trasformato in 5.0, o per meglio dire, da integer viene trasformato in float.
Ora, la divisione 5.0 / 2 non ? pi? una divisiona tra interi, pertanto produce un risultato di tipo float, che viene immagazzinato in x.
Ultima modifica effettuata da Zizzius 29/05/05 22:22
aaa