parsear long log convertir convert castear cast java int type-conversion long-integer

java - log - Convertir long a int da 0



long to string (2)

He estado probando con este fragmento de código:

public class Test { public static int longToInt(long num) { return (int) (num); } public static void main(String[] args) { System.out.println(longToInt(100000000L)); } }

Lo ejecuté pero longToInt solo devolvió 0. ¿Qué está pasando?


porque, el tiempo que di no encaja en int. ¡Dale un poco más largo y pruébalo! int (32 bits) de largo (64 bits)


Lanzar un long a un int se hace eliminando los 32 bits superiores del long . Si el valor long es mayor que Integer.MAX_VALUE (2147483647) o menor que Integer.MIN_VALUE (-2147483648), el efecto neto es que pierde bits significativos, y el resultado es "basura".

Habiendo dicho eso, el código que usted suministró no se comporta como usted dice ... si lo compila y lo ejecuta correctamente. La versión original debería imprimir un número inesperado ... pero no cero. La versión modificada debe imprimir 1000000 como se esperaba.

... ¿hay alguna manera de que pueda almacenar un número largo mayor que Integer.MAX_VALUE dentro de un número int?

No.

Bueno, estrictamente sí ... en algunas circunstancias. Podría hacer algo para mapear los números. Por ejemplo, si sabe que sus números están siempre en el rango de A a B , y B - A es menor que 2 32 , entonces puede asignar un long en ese rango a un int por restando A de eso.

Sin embargo, matemáticamente es imposible definir una asignación de este tipo si el tamaño del dominio de los números que está almacenando en el long es mayor que 2 32 . Lo que normalmente es