java.lang.NumberFormatException:对于输入字符串:“10101010101010101010101010101010”[复制]

问题描述 投票:0回答:3

这个问题在这里已有答案:

二进制字符串是“10101010101010101010101010101010”,32位

我尝试时遇到这个例外

Integer.parseInt("10101010101010101010101010101010", 2);

但是相同的字符串(添加“0b”前缀)

System.out.print(0b10101010101010101010101010101010);

返回-1431655766。

这是有效的二进制字符串吗?

java binary integer
3个回答
2
投票

Integer.parseInt()是错误的方法,因为它只接受带符号的数字。

使用Java8,使用:

Integer.parseUnsignedInt("10101010101010101010101010101010", 2);

在Java8之前,使用:

(int) Long.parseLong("10101010101010101010101010101010", 2);

1
投票

您要转换的值超出了int类型的大小,UseBigInteger

        BigInteger b = new BigInteger("10101010101010101010101010101010",2);

1
投票
Integer.parseInt("10101010101010101010101010101010", 2);

请注意,这将是2863311530,这将导致溢出,因为它高于Integer.MAX_VALUE。

System.out.print(0b10101010101010101010101010101010);

然而,这使用整数的内部表示,这是双补码形式。这就是为什么它是消极的。然而,Integer.parseInt()将其视为无符号二进制数,这会导致异常。

理解不同的位表示很重要。

编辑:如果您希望将输入解释为双补码,请使用:

Integer.parseUnsignedInt("10101010101010101010101010101010", 2);
© www.soinside.com 2019 - 2024. All rights reserved.