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

时间:2017-07-24 16:26:11

标签: java

javadoc开始,我知道Java默认情况下将int数据类型作为32位有符号二进制补码整数,其最小值为-2 ^ 31,最大值为2 ^ 31 -1。

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

System.out.println(Integer.parseInt("1111", 2));

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

2 个答案:

答案 0 :(得分:5)

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

这样的事情最好的选择是read the documentation。没有提到两个补充。但它确实说:

  

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

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

答案 1 :(得分:1)

根据java.lang.Integer类的javadoc类parseInt(String s,int radix)方法执行以下操作;

  

将字符串参数解析为指定基数中的有符号整数   通过第二个论点。字符串中的字符必须全部   指定基数的数字。

当你跑步时;

System.out.println(Integer.parseInt("1111", 2));

你正在告诉采取的方法" 1111"作为一个字符串并将其转换为一个基数为2(你的基数)的int值,最终它总和为二进制的15。