perché 24 * 60 * 60 * 1000 * 1000 diviso per 24 * 60 * 60 * 1000 non uguale a 1000 in Java?perché 24 * 60 * 60 * 1000 * 1000 diviso per 24 * 60 * 60 * 1000 non uguale a 1000 in Java?
risposta
Poiché la moltiplicazione trabocca interi a 32 bit. In 64 bit va bene:
public class Test
{
public static void main(String[] args)
{
int intProduct = 24 * 60 * 60 * 1000 * 1000;
long longProduct = 24L * 60 * 60 * 1000 * 1000;
System.out.println(intProduct); // Prints 500654080
System.out.println(longProduct); // Prints 86400000000
}
}
Ovviamente dopo la moltiplicazione è traboccato, la divisione non sta per "annullare" in overflow.
Che cosa significa 1000 giorni * 1000 significa comunque? –
Questi devono essere i nuovi "anni metrici" di cui parlano sempre. –
1000 giorni * 1000 sarebbero 1.000.000 di giorni. Non c'è nulla di misterioso in questo. Ora, 1000 pollici x 1000 pollici è 1.000.000 pollici quadrati, quindi presumibilmente 1000 giorni x 1000 giorni sarebbero 1.000.000 di giorni quadrati. Ma non sono esattamente sicuro di cosa sia un "giorno quadrato". Forse questa è un'unità di misura che i viaggiatori del tempo usano quando si occupano di spazi bidimensionali. – Jay
È necessario iniziare con 24L * 60 * ... perché l'int overflow.
La tua domanda BTW è un copia/incolla di Puzzle 3: Long Division da Java Puzzlers;)
+1 per costante lunga da forzare a lungo anziché int. –
Se si desidera eseguire tale calcolo, allora dovete o riordinare le operazioni (per evitare overflow) o utilizzare un tipo di dati più grande. Il vero problema è che l'aritmetica su interi a dimensione fissa in Java non è associativa; è un dolore, ma c'è il compromesso.
- 1. Perché (360/24)/60 = 0 ... in Java
- 2. Backoff esponenziale: time.sleep con random.randint (0, 1000)/1000
- 3. I miei FPS limitati: 60
- 4. perché solo 60 fps sono veramente fluidi in cocos2d?
- 5. MySQL Il nodo Galera non si avvia (interruzione con errore 'WSREP: [...]: 60: impossibile raggiungere la vista primaria: 60 (operazione scaduta)')
- 6. Node.js max. 1000 connessioni simultanee
- 7. Intervallo timer 1000! = 1 secondo?
- 8. oracle dove in limitazione a 1000/hibernate
- 9. Come posso limitare il framerate a 60 fps in Java?
- 10. R Markdown Table 1000 separator
- 11. Download dei primi 1000 byte
- 12. Query MySQL riavviata ogni 60 secondi?
- 13. php Post limitato a 1000 variabili
- 14. FileSystemWatcher non riesce con 1000 file creazioni
- 15. Chiamare una funzione ogni 60 secondi
- 16. Perché park/unpark ha un utilizzo della CPU del 60%?
- 17. Test di carico per 1000 utenti simultanei
- 18. 1000 cifre di pi in python
- 19. Perché devo moltiplicare unix timestamp per 1000 in JavaScript?
- 20. Recordset che restituisce solo 1000 record
- 21. Come implementare UIScrollView con 1000 subviews?
- 22. WebSocket si chiude dopo 1000 messaggi
- 23. SQL Server 2000 Delete Top (1000)
- 24. "Attendi Task.Delay (1000)" blocca ANY thread?
- 25. Calcolo delle statistiche su 1000 array
- 26. if ((123/1000)> 0) restituisce false
- 27. Come inserire 1000 righe alla volta
- 28. Registrazione logaritmica 1, 10, 100, 1000, ecc.
- 29. PIG: ERROR 1000: Errore durante l'analisi
- 30. Kindle Fire hitches e texture corruzione a 60 fps
Poiché Java si estende in direzione est-ovest, quindi il giorno è un po 'più lungo di 86400000000 microsecondi :-) – balpha
Penso che per questa domanda abbia senso specificare che significa "int" e non "long". senza mostrare il codice attuale o specificando, la domanda è ambigua. questo è il tipo di domanda che odiavo nei test a scuola - dovrei rispondere "è * uguale a 1000" (corretto, se supponendo long) o dovrei supporre che il prof intendesse dire che tutto è stato fatto come ints, e quindi menzionare overflow? –