![](/img/trans.png)
[英]BitSet is not working for Integer.MAX_VALUE and Integer.MIN_VALUE
[英]Java Integer.MAX_VALUE and Integer.MIN_VALUE
以下代碼
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
請記住,在Integer中實現MAX_VALUE
后,值會返回MIN_VALUE
並再次循環,如果值<=Integer.MAX_VALUE
,那么它必須>=Integer.MIN_VALUE
,那么為什么布爾變量d
返回false
?
一旦我們了解了longValue()
返回的內容,就可以解釋這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
。 對於b
和c
打印false
的唯一值是那些在longValue()
時將分別轉換為Long.MIN_VALUE
和Long.MAX_VALUE
BigInteger
。
通過如下打印值可以很容易地理解它
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
希望這可以幫助
從Java 1.8開始,您可以使用BigInteger.longValueExact()
,如果BigInteger值無法精確表示為long值,則會拋出ArithmeticException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.