有人可以解释下面两个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,我会发现编译错误。但程序显然会编译,因此输出的差异必然是由于其他原因造成的。
答案 0 :(得分:7)
由于Long已签名,因此使用一位来存储符号。 Long.MAX_VALUE
因此是2 ^ 63 - 1。
请参阅此处的文档: http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html