jdkソースでは、IntegerのparseInt(String str、int radix)algorithm.letの以下のコードソースを参照してください。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;
}
それは結果である理由 - =桁ではなく、その結果+ =桁?私は混乱しています。
「返品が拒否されましたか?結果:-result; 'あなたが引用したスニペットの約2行下にありますか? –
「MAX_VALUE近くで累積的に負の驚きを回避する」というコメントがありましたか? – EJP
numが負であるとき、limitableはInteger.MIN_VALUEであり、numは正であり、varaiableの上限は-Integer.MAX_VALUEです。なぜですか?私も混乱します。あなたはアルゴリズムかいくつかの記事のリンクを指定できますか? –