Spa*_*ter 1 java binary max long-integer
谁能解释下面两个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));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
第一行输出包含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