Integer.parseInt() - 有符号和无符号数

The*_*nce 1 java

从javadoc,我理解Java默认情况下将int数据类型作为32位带符号的二进制补码整数,其最小值为-2 ^ 31,最大值为2 ^ 31-1.

如果是这种情况,为什么会这样:

System.out.println(Integer.parseInt("1111", 2));
Run Code Online (Sandbox Code Playgroud)

给出值15而不是-1(2的补码有符号数).

Mic*_*ael 5

你已经假设,因为整数在内部使用二进制补码表示,Integer.parseInt基数为2(二进制)也采用该形式的数字.这个假设是不正确的.

这样的事情最好的选择是阅读文档.没有提到两个补充.但它确实说:

第一个字符可以是ASCII减号' - '('\ u002D')以表示负值

因此,如果要解析使用二进制补码表示的值,则必须编写一个将二进制数转换为绝对值的函数,然后在必要时附加减号.