谁能解释下面两个 println 语句的输出之间的区别?
public class LongTest {
public static void main(String[] args) {
System.out.println(Long.toBinaryString(0xffff_ffff_ffff_ffffL));
System.out.println(java.lang.Long.toBinaryString(Long.MAX_VALUE));
}
}
输出是:
1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111
输出的第一行包含 64 个二进制数字。第二行只有63位二进制数。
如果 0xffff_ffff_ffff_ffffL 大于 Long.MAX_VALUE,我预计会出现编译器错误。但是程序显然编译通过了,所以输出的差异一定是由于其他原因造成的。
最佳答案
由于 Long 是有符号的,所以使用一位来存储符号。 Long.MAX_VALUE
因此是 2^63 - 1。
请参阅此处的文档: http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html
关于java - 为什么 java.lang.Long(MAX_VALUE) 中只有 63 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098667/