Java Long Min和Max与文档中提到的不完全相同

时间:2017-10-20 13:22:23

标签: java long-integer

根据java doc,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);
}

1 个答案:

答案 0 :(得分:0)

Math.pow的返回值为double

double只能精确表示最高2^53 - 1的所有整数值,最低可归-2^53,因为它只有53个尾数位。

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