2

为什么这两种方法在处理二进制数时使用两种不同的方法?方法中表示负二进制数的字符串Integer.parseInt(String s, 2)应以-字符开头,但Integer.toBinaryString(int i)返回的字符串前面有额外的 1。所以,这段代码

Integer.parseInt(Integer.toBinaryString(-1), 2);

抛出java.lang.NumberFormatException。这种行为的原因是什么?

4

2 回答 2

2

这是设计使然;Integer.toBinaryString

将整数参数的字符串表示形式返回为以2 为底的无符号整数

(强调补充)。

即,toBinaryString提供了一种将整数格式化为公共二进制补码表示的方法,这是大多数处理器在内部实际存储有符号整数的方式。

于 2013-02-11T09:41:53.560 回答
0

Integer::parseInt(String,int)期待一个字符串,因此它正在寻找-负数的符号。而这Integer::toBinaryString(int)是为您提供输入的二进制等价物。在二进制中,负数由 2 的 Compliment 表示。

于 2013-02-11T09:42:18.523 回答