这个问题在这里已有答案:
二进制字符串是“10101010101010101010101010101010”,32位
我尝试时遇到这个例外
Integer.parseInt("10101010101010101010101010101010", 2);
但是相同的字符串(添加“0b”前缀)
System.out.print(0b10101010101010101010101010101010);
返回-1431655766。
这是有效的二进制字符串吗?
Integer.parseInt()是错误的方法,因为它只接受带符号的数字。
使用Java8,使用:
Integer.parseUnsignedInt("10101010101010101010101010101010", 2);
在Java8之前,使用:
(int) Long.parseLong("10101010101010101010101010101010", 2);
您要转换的值超出了int
类型的大小,UseBigInteger
:
BigInteger b = new BigInteger("10101010101010101010101010101010",2);
Integer.parseInt("10101010101010101010101010101010", 2);
请注意,这将是2863311530,这将导致溢出,因为它高于Integer.MAX_VALUE。
System.out.print(0b10101010101010101010101010101010);
然而,这使用整数的内部表示,这是双补码形式。这就是为什么它是消极的。然而,Integer.parseInt()
将其视为无符号二进制数,这会导致异常。
理解不同的位表示很重要。
编辑:如果您希望将输入解释为双补码,请使用:
Integer.parseUnsignedInt("10101010101010101010101010101010", 2);