long m = 24 * 60 * 60 * 1000 * 1000;
Il codice sopra riportato crea overflow e non stampa il risultato corretto.Overflow si verifica con la moltiplicazione
long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;
Le 2 righe precedenti stampano il risultato corretto.
Le mie domande sono-
- importa a compilatore che io uso,
m2
om3
? - In che modo java inizia a moltiplicarsi? Da sinistra a destra o da destra a sinistra? Il 24 * 60 viene calcolato per primo o 1000 * 1000?
oops- long m2 = 24L * 60 * 60 * 1000 * 1000 * 1000 * 1000; long m3 = 24 * 60 * 60 * 1000 * 1000 * 1000 * 1000L; m2 e m3 non danno lo stesso risultato quando più volte si dice una moltiplicazione di un fattore di 1000 * 1000. Quindi sembra che la moltiplicazione avvenga da sinistra a destra. – rents
A destra, usare 'm2' in modo che ogni moltiplicazione intermedia sia promossa a' long'. La moltiplicazione è sinistra-associativa, quindi va da sinistra a destra. – GriffeyDog
La moltiplicazione è associativa, quindi l'ordine non avrebbe importanza. Tuttavia è calcolato da sinistra a destra nei casi in cui conta come chiamare i metodi che restituiscono un numero. –