我有一个数字的二进制表示形式,想将其转换为 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
}
}
这段代码的结果是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
- i.e. Long.parseLong("-1",2)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)