让我们以Byte.parseByte()
为例,作为包装器的parseXXX()
之一。
从 parseByte(String s, int radix)'s JavaDoc
:
将字符串参数解析为由指定的基数中的有符号字节
第二个论点。
但这不是radix = 2
的事实。换句话说,-127
的二进制文字是10000000
:
byte b = (byte) 0b10000000;
因此,应满足以下条件:
byte b = Byte.parseByte("10000000", 2);
但不幸的是,它抛出
NumberFormatException
,相反,我必须按如下方式进行操作:byte b = Byte.parseByte("-111111", 2);
其中
parseByte()
将二进制字符串解析为符号幅度(符号和大小),应将其解析为有符号二进制(2的补码,即MSB是符号位)。我对此有错吗?
最佳答案
我对此有错吗?
是。 Javadoc没有说2的补码。实际上,它明确声明了它如何识别负值(即-
前缀,因此有效地“人类可读”符号幅度)。
换种方式思考。如果parseByte
将radix-2解释为2的补码,那么您希望它对radix-10(或者实际上是任何其他基数)做什么?为了保持一致性,必须为10的补码,这很不方便,我向您保证!