In:
double r1 = (double)(a/b);
r1 potrebbe essere dichiarato come int, long, float o double. In tutti questi casi il cast non è affatto obbligatorio, infatti la divisione tra due int dà come risultato un int che è assegnabile a int ma anche a long/float/double tramite cast implicito (perché sono tipi più grandi di int).
Per gli operatori binari (ovvero con 2 operandi) vale la binary numeric promotion che, senza entrare in tutti dettagli, dice che:
- se uno dei due operandi è un double, l'altro è convertito a double
- altrimenti se uno dei due operandi è un float, l'altro è convertito a float
- altrimenti se uno dei due operandi è un long, l'altro è convertito a long
- altrimenti entrambi gli operandi sono comunque convertiti come minimo a int.
Idem, binary numeric promotion. Se uno è int e l'altro è float, allora il int è convertito a float. E il risultato è un float.
Idem, binary numeric promotion ma applicata in 2 step.
r1 è double, r2 è int, risultato: un double. r3 è float, quindi è portato a double. Risultato finale: un double.


Rispondi quotando