Как исправить ошибку с добавлением целых чисел в Java? - PullRequest
8 голосов
/ 14 февраля 2010

В данном примере:

int a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);

вернет: c= -1183744630, почему?

Как это исправить?

Ответы [ 5 ]

11 голосов
/ 14 февраля 2010

Ваше целое число переполнено. Целое число имеет максимальное значение Integer.MAX_VALUE (2 ^ 31 - 1). Если значение станет больше, ваша переменная больше не будет иметь правильного значения.

Длинный имеет больший диапазон.

long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
9 голосов
/ 14 февраля 2010

MAX_VALUE для Java long - 9223372036854775807, поэтому решение Шаррелса подходит для вашего примера.

Вот еще одно решение, которое может подняться еще выше, если оно вам понадобится.

BigInteger a = new BigInteger(2111000333);
BigInteger b = new BigInteger(1000222333);
BigIntegerc = a.add(b);
System.out.println("c= " + c);

Этот подход ограничен только памятью JVM.

4 голосов
/ 14 февраля 2010
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
   // a and b cannot be added.
}
2 голосов
/ 14 февраля 2010

Максимальное значение типа int в Java составляет 2 147 483 647. Если вы хотите вычислить что-то для этого значения, вы должны использовать тип long .

1 голос
/ 14 февраля 2010

Типы данных Java

Тип данных int - это 32-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -2 147 483 648 и максимальное значение 2 147 483 647

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...