and*_*dev 7 java string binary java-8
我有一个数字的二进制表示,并希望将其转换为long(我有Java 8)
public class TestLongs {
public static void main(String[] args){
String a = Long.toBinaryString(Long.parseLong("-1")); // 1111111111111111111111111111111111111111111111111111111111111111
System.out.println(a);
System.out.println(Long.parseLong(a, 2));// ??? but Long.parseUnsignedLong(a, 2) works
}
Run Code Online (Sandbox Code Playgroud)
}
这段代码导致Exception in thread "main" java.lang.NumberFormatException: For input string: "1111111111111111111111111111111111111111111111111111111111111111"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
1111111111111111111111111111111111111111111111111111111111111111
at java.lang.Long.parseLong(Long.java:592)
这里有什么问题?为什么Long.parseLong(a,2)不起作用?
Long.parseLong()
不会将第一个'1'字符视为符号位,因此该数字被解析为2 ^ 64-1,这太大了long
.Long.parseLong()
期望String
表示负数的输入s以' - '开头.
为了Long.parseLong(str,2)
要回-1
,你应该传递给它一个String
与" - "开始,并用二进制表示结束1
-即Long.parseLong("-1",2)
.