¿por qué 24 * 60 * 60 * 1000 * 1000 dividido por 24 * 60 * 60 * 1000 no es igual a 1000 en Java?¿por qué 24 * 60 * 60 * 1000 * 1000 dividido por 24 * 60 * 60 * 1000 no es igual a 1000 en Java?
Respuesta
Porque la multiplicación desborda los enteros de 32 bits. En 64 bits de que está bien:
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
}
}
Obviamente después de la multiplicación se ha desbordado, la división no va a "deshacer" que se desbordan.
¿Qué significa 1000 días * 1000 de todos modos? –
Esos deben ser los nuevos "años métricos" de los que siempre hablan. –
1000 días * 1000 serían 1,000,000 días. No hay nada misterioso en eso. Ahora, 1000 pulgadas x 1000 pulgadas son 1,000,000 pulgadas cuadradas, así que presumiblemente 1000 días x 1000 días serían 1,000,000 de días cuadrados. Pero no estoy exactamente seguro de qué es un "día cuadrado". Quizás esa es una unidad de medida que los viajeros del tiempo usan cuando se trata de espacio pan-dimensional. – Jay
Debe comenzar con 24L * 60 * ... porque el int se desborda.
Su pregunta BTW es un copiar/pegar de Puzzle 3: Long Division de Java Puzzlers;)
+1 para una constante larga para forzar long en lugar de int. –
Si desea realizar este cálculo, entonces debe o bien volver a ordenar las operaciones (para evitar el desbordamiento) o use un tipo de datos más grande. El verdadero problema es que la aritmética en enteros de tamaño fijo en Java no es asociativa; es un dolor, pero hay una compensación.
reordenar los números no evitará el desbordamiento – cherouvim
@cherouvim, pero el reordenamiento de las operaciones podría. – Nosredna
Creo que Thom está hablando de reordenar la multiplicación para que haga algo como esto en su lugar: ((24 * 60)/(24 * 60)) * ((1000 * 1000)/(1000 * 1000)) – DeadHead
- 1. (360/24)/60 = 0 ... en Java
- 2. .NET ¿Volver a dibujar a 60 FPS?
- 3. Mi FPS limitado: 60
- 4. Llamar a una función cada 60 segundos
- 5. Recordset solo devuelve 1000 registros
- 6. ¿Cómo puedo limitar mi framerate a 60 fps en Java?
- 7. Descargar los primeros 1000 bytes
- 8. php Publicación limitada a 1000 variables
- 9. Android, envía mensajes a 1000 dispositivos rápidamente
- 10. 1000 dígitos de pi en python
- 11. ¿Cómo leer la colección en trozos por 1000?
- 12. iOS AVFoundation - Conversión de vídeo en imágenes a 60 fps
- 13. FileSystemWatcher falla con 1000 archivos creaciones
- 14. ¿Qué es más difícil, sincronizar 2 hilos o 1000 hilos?
- 15. Prueba de carga para 1000 usuarios simultáneos
- 16. SQL IN Cláusula 1000 elemento límite
- 17. El servidor MySQL se ha ido - en exactamente 60 segundos
- 18. ¿Por qué tm_sec varía de 0-60 en vez de 0-59 en time.h?
- 19. ¿Reduce las solicitudes HTTP de 1000 imágenes?
- 20. ¿Qué significa el .f en 1000.f? C++
- 21. Capturar 60 fps en la aplicación para iPhone
- 22. Extender token de acceso de Facebook después de 60 días
- 23. Facebook Acceso 60 días token y Desaprobados Offline_Access
- 24. ¿Por qué "echo strcmp ('60 ',' 100 ');" en la salida de php 5? documentación
- 25. El tiempo máximo de ejecución de 60 segundos superó error
- 26. ¿Por qué necesito multiplicar las marcas de tiempo de Unix por 1000 en JavaScript?
- 27. PHP - Cómo contar los 60 días desde la fecha complemento
- 28. LDAP: cómo devolver más de 1000 resultados (java)
- 29. jQuery's $ ('# divOne'). Animate ({zIndex: -1000}, 2000) no funciona?
- 30. Jetty's DispatcherType (y otras 1000 cosas no documentadas)
Dado que Java se extiende en dirección este-oeste, entonces el día es un poco más largo que 86400000000 microsegundos :-) – balpha
Creo que para que esta pregunta tenga sentido debe especificar que significa int y no long. sin mostrar el código real o especificar, la pregunta es ambigua. este es el tipo de pregunta que odiaba en las pruebas en la escuela: ¿se supone que debo responder que "es * igual a 1000" (correcto, si se asumen largos) o se supone que debo adivinar que el profesor quería decir que todo estaba siendo hecho como ints, y por lo tanto mencionan overflow? –