根据java doc,Long.MIN_VALUE
为-2^63
,Long.MAX_VALUE
为2^63 - 1
。
但Long.MIN_VALUE
实际值为-2^63 - 1
且Long.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);
}
答案 0 :(得分:0)
Math.pow
的返回值为double
。
double
只能精确表示最高2^53 - 1
的所有整数值,最低可归-2^53
,因为它只有53个尾数位。
错误仅在于您尝试检查这些值的方式。