[Java] Tipi primitivi

Gol_D_Roger
Salve, potreste aiutarmi con questa domanda:

- Se a è una variabile di tipo double, l’assegnazione a = 1.0 + 1/2 assegna il valore 1.5 alla variabile a.

le opzioni sono vero o falso. La risposta è falso, ma non capisco perchè.

Qualcuno potrebbe gentilmente aiutarmi? Grazie mille in anticipo!

Risposte
feddy
E' corretto.
Se provi col codepad di blueJ, per esempio, noti che ad a viene assegnato il valore 1.0 e non 1.5.

Questo perchè 1/2 viene letto come intero e viene effettuato il troncamento della sua parte decimale.
...
non sono un informatico (anzi, frequento Matematica) e pertanto la mia sono sicuro che sia una spiegazione non corretta del tutto formalmente :D

Gol_D_Roger
grazie mille!

apatriarca
La ragione è che la divisione ha precedenza rispetto alla somma per cui l'espressione viene vista come 1.0 + (1 / 2). Ma 1 e 2 sono costanti intere per cui la divisione avrà risultato intero e uguale a 0. A questo punto sommerai questo valore 0 (che verrà automaticamente convertito nel double 0.0) a 1.0 ottenendo 1.0.

La lezione da trarre da questo esercizio è di non usare mai costanti intere nelle divisioni se vuoi ottenere un double.

Gol_D_Roger
Innanzitutto grazie mille per la tua risposta e scusa se disturbo ancora,

quale sarebbe invece il risultato per questa:

Con le seguenti dichiarazioni-assegnazioni double a=1.2; int b=2; int c=7; quale è il valore dell’espressione c/b+c*a

Grazie ancora

apatriarca
c/b è intero per cui è uguale a 2, mentre c*a è double e vale 8.4. La loro somma sarà quindi uguale a 10.4.

Gol_D_Roger
grazie mille per la risposta!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.