В источнике jdk у меня есть некоторые вопросы об алгоритме parseInt (String str, int radix) Integer. Посмотрите источник кода ниже.Почему алгоритм Integer.paseInt() вычисляет отрицательный результат, наконец, в sun jdk
multmin = limit/radix;
while (i < len) {
// Accumulating negatively avoids surprises near MAX_VALUE
digit = Character.digit(s.charAt(i++),radix);
if (digit < 0) {
throw NumberFormatException.forInputString(s);
}
if (result < multmin) {
throw NumberFormatException.forInputString(s);
}
result *= radix;
if (result < limit + digit) {
throw NumberFormatException.forInputString(s);
}
result -= digit;
}
почему результат - = цифра, а не результат + = цифра? Я запутался.
Вы видите строку 'return negative? результат: -result; 'около двух строк ниже фрагмента, который вы цитировали? –
Вы видели, как комментарий «накапливается отрицательно, избегает сюрпризов возле MAX_VALUE»? – EJP
поэтому, когда число отрицательно, limit varayable является Integer.MIN_VALUE, а число положительным, предел varayable -Integer.MAX_VALUE, почему? Я тоже смущен. не могли бы вы указать алгоритм или ссылки на некоторые статьи? –