parseInt(String s, int radix)方法
如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常:
1.第一个参数为 null 或一个长度为零的字符串。
2.基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
3.假如字符串的长度超过1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中存在任意不是由指定基数的数字表示的字符。
4.字符串表示的值不是 int 类型的值。
而
你的问题就是第二点,
11111111111111111111111111111011转换成十进制就是4294967291,远远超出了int的范围,所以报出了异常,如果你想获得-5,你应该将1111 1111 1111 1111 1111 1111 1111 1011取反,得到
0000 0000 0000 0000 0000 0000 0000 0100,再加1得到
0000 0000 0000 0000 0000 0000 0000 0101,因为源码的第一位是1,表示负数,所以这个就是-5了. |