En el ejemplo dado:¿Cómo solucionar un error al agregar números enteros en Java?
int a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
volverá: c= -1183744630
, ¿por qué?
¿Cómo solucionar eso?
En el ejemplo dado:¿Cómo solucionar un error al agregar números enteros en Java?
int a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
volverá: c= -1183744630
, ¿por qué?
¿Cómo solucionar eso?
Su número entero está desbordado. Un número entero tiene un valor máximo de Integer.MAX_VALUE
(2^31 - 1). Si el valor se vuelve más grande, su variable ya no tendrá el valor correcto.
Un largo tiene un rango más grande.
long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
El valor máximo de un int en Java es 2147483647. Cuando desee calcular algo superior a este valor, debe usar el tipo long.
El tipo de datos int es una de 32 bits entero con signo de complemento a dos. Tiene un valor mínimo de -2147483648 y un valor máximo de 2.147.483.647
El MAX_VALUE de un tiempo de Java es 9223372036854775807, por lo que la solución Scharrels' trabaja por su ejemplo.
Aquí hay otra solución que puede aumentar aún más si lo necesita.
BigInteger a = new BigInteger(2111000333);
BigInteger b = new BigInteger(1000222333);
BigIntegerc = a.add(b);
System.out.println("c= " + c);
Este enfoque está delimitado solo por la memoria JVM.
Verificaría 'if (b> LONG.MAX_VALUE - a)' antes de ir al objeto pesado 'BigInteger'. – fastcodejava
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
// a and b cannot be added.
}
@Scharrels - ¿y si debe permanecer como un número entero? –
Si necesita permanecer como un int, puede convertir el valor largo en un entero, 'int newInt = (int) c;'. Aunque, no estoy completamente seguro de si este sería un buen enfoque. –
No puedes poner valores tan grandes en un entero, entonces estás atascado. Si necesita hacer una parte de sus cálculos con valores grandes, que luego se volverán pequeños, convierta sus enteros en largos, haga los cálculos y recupérelos. Sin embargo, tenga en cuenta que el valor debe ser menor que Integer.MAX_VALUE cuando lo rechace. – Scharrels