以下代码
BigInteger number=new BigInteger("2154789654785210095153123254756845");
boolean b=number.longValue()>Long.MIN_VALUE;
boolean c=number.longValue()<Long.MAX_VALUE;
boolean d=number.longValue()>=Integer.MIN_VALUE;
boolean e=number.longValue()<=Integer.MAX_VALUE;
System.out.println(""+b);
System.out.println(""+c);
System.out.println(""+d);
System.out.println(""+e);
生成输出
true
true
false
true
请注意,在整数中获得MAX_VALUE
后,值会返回MIN_VALUE
并再次循环,如果值为<=Integer.MAX_VALUE
,则必须为>=Integer.MIN_VALUE
,那么为什么布尔变量d
会返回false
?
答案 0 :(得分:12)
一旦我们了解longValue()
正在返回的内容,就可以解释这一点。
将此BigInteger转换为long。这种转换类似于Java *语言规范5.1.3节中定义的从long到int的缩小原语转换:如果这个BigInteger太大而不适合长,只返回低位64位。请注意,此转换可能会丢失有关BigInteger值的总体大小的信息,并返回具有相反符号的结果。
打印此变量的值会产生-4694333933485660691
,该值肯定是合法的long
值,但远小于Integer.MIN_VALUE
(隐式转换为long
在这里),所以false
对于d
打印输出是正确的。
b
和c
输出都是true
,因为值-4694333933485660691
大于Long.MIN_VALUE
,因为值-4694333933485660691
是小于Long.MAX_VALUE
。为false
和b
打印c
的唯一值是那些将分别转换为BigInteger
和Long.MIN_VALUE
的{{1}}个,调用Long.MAX_VALUE
时。
答案 1 :(得分:0)
通过打印下面的值可以很容易地理解
number.longValue()[-4694333933485660691]>Long.MIN_VALUE[-9223372036854775808 = true
number.longValue()[-4694333933485660691]<Long.MAX_VALUE[9223372036854775807 = true
number.longValue()[-4694333933485660691]>=Integer.MIN_VALUE[-9223372036854775808 = false
number.longValue()[-4694333933485660691]<=Integer.MAX_VALUE[9223372036854775807 = true
希望这有帮助
答案 2 :(得分:0)
从Java 1.8开始,你可以使用BigInteger.longValueExact()
,如果BigInteger值不能精确地表示为long值,它将抛出ArithmeticException
。