您的代码失败,因为它尝试解析一个需要33位才能存储为有符号整数的数字。
有符号
int是二进制补码表示形式的32位值,其中第一位将指示数字的符号,其余31位将指示数字的值。(-ish。)Java仅支持带符号的整数,并且
parseInt()不应该和Friends
一起解析两个补码的位模式-
从而将右边第32位的
1or或(可能暗含)解释
0为符号。它们旨在支持解析人类可读的表示,这是符号的可选
-(或
+),后跟数字的绝对值。
在这种情况下,这是一种错误的直觉,导致您期望自己描述的行为:如果您要解析除2以外的 任何
其他基数(或者可能是其他常用的2的幂次基数),您是否期望第一个数字为输入会影响符号吗?显然你不会;比如说,
按设计
parseInt("2147483648")返回的收益将使PHP疯狂。-2147483648__
特殊的两重力基础也令人感到奇怪。最好有一种单独的方法来处理位模式,例如此答案中的一种。



