为什么这两种方法在处理二进制数时使用两种不同的方法?方法中表示负二进制数的字符串Integer.parseInt(String s, 2)
应以-
字符开头,但Integer.toBinaryString(int i)
返回的字符串前面有额外的 1。所以,这段代码
Integer.parseInt(Integer.toBinaryString(-1), 2);
抛出java.lang.NumberFormatException
。这种行为的原因是什么?
为什么这两种方法在处理二进制数时使用两种不同的方法?方法中表示负二进制数的字符串Integer.parseInt(String s, 2)
应以-
字符开头,但Integer.toBinaryString(int i)
返回的字符串前面有额外的 1。所以,这段代码
Integer.parseInt(Integer.toBinaryString(-1), 2);
抛出java.lang.NumberFormatException
。这种行为的原因是什么?
这是设计使然;Integer.toBinaryString
将整数参数的字符串表示形式返回为以2 为底的无符号整数。
(强调补充)。
即,toBinaryString
提供了一种将整数格式化为公共二进制补码表示的方法,这是大多数处理器在内部实际存储有符号整数的方式。
Integer::parseInt(String,int)
期待一个字符串,因此它正在寻找-
负数的符号。而这Integer::toBinaryString(int)
是为您提供输入的二进制等价物。在二进制中,负数由 2 的 Compliment 表示。