Java Long Min 和 Max 与文档中提到的不准确

Java Long Min and Max not exact as mentioned in docs

根据 java 文档,Long.MIN_VALUE-2^63Long.MAX_VALUE2^63 - 1

但是 Long.MIN_VALUE 实际值是 -2^63 - 1Long.MAX_VALUE 值是 2^63 如果我这样计算的话:

long min = -(long) Math.pow(2, 63);
long max = (long) Math.pow(2, 63) - 1;

System.out.println(min);
System.out.println(max);

最小值和最大值之间的所有范围都相同,但实际值不同。我对上面代码的理解有误吗?

糟糕,是我检查的方式导致了错误的值。以下是我能想到的最简单的方法来验证 java.

中的 2 个幂值
long num = 1;
for(long count = 0; count < 63; count ++) {
    num = num * 2;
}
System.out.println(num);
}

Math.pow 的 return 值为 double

double 只能精确表示所有整数值,最多为 2^53 - 1,向下为 -2^53,因为它只有 53 个尾数位。

错误只是在于您尝试检查这些值的方式。