java - 为什么 java.lang.Long(MAX_VALUE) 中只有 63 位?

标签 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));
    }
}

输出是:

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/

相关文章:

sql-server - 从 SQL 中的字符串列中选择最大值

r - 向量的最小和最大连续值

sql-server - 在 SQL Server 中查找最大值的时间

c# - C# 二进制 PowerShell 模块中的 ValidateScript ParameterAttribute

java - 单击按钮后显示小窗口

java - 如何正确获取另一个城市的当前时间?

java - 为什么套接字不会在服务器死机时死机?为什么当服务器还活着时套接字会死掉?

java - 如何为多个表连接创建实体类

python - 输入列表中的单个项目

将由 0's and 1' 组成的十六进制转换为等效的二进制