2013-05-14 70 views
4

如何獲得大於Long.MAX_VALUE的長數?比Long.MAX_VALUE長很多

我想這個方法返回true

boolean isBiggerThanMaxLong(long val) { 
    return (val > Long.MAX_VALUE); 
} 

回答

25

嗯,這個方法不能返回true。這就是Long.MAX_VALUE。如果它的名字是...錯誤,那將會是真的混淆。那麼它應該被稱爲Long.SOME_FAIRLY_LARGE_VALUE,並且具有零字面的合理用途。只需使用Android's isUserAGoat,或者您可以推出自己的功能,總是返回false

請注意,內存中的long需要固定數量的字節。 From Oracle

long:長數據類型是一個64位帶符號的二進制補碼整數。其最低值爲-9,223,372,036,854,775,808,最高值爲9,223,372,036,854,775,807(含)。當您需要的值範圍比int提供的範圍寬時,使用此數據類型。

正如您從基礎計算機科學或離散數學中可以知道的那樣,由於長度爲64位,所以有2^64個可能值。正如你從離散數學或數論或常識中所知道的那樣,如果只有很多可能性,其中一個必須是最大的。那將是Long.MAX_VALUE。所以你問的東西等於「有一個整數是> 0和< 1?」數學上無意義的。

如果你真的需要這個東西,請使用BigInteger class。

+0

謝謝!我正在做軟件測試的作業,源代碼包含判斷「triangle.lborderA> 0 && triangle.lborderA <= Long.MAX_VALUE」。 – gongshw 2013-05-14 14:42:26

+4

有人應該通過發明傳送或至少創建一個android小工具來打破isUserAGoat API ether爲山羊。 – 2013-05-14 14:44:41

+0

@ gongshw假設'triangle.lborderA'是一個'long',那麼你可以刪除該檢查。如果它優化出來,我不會感到驚訝。 – djechlin 2013-05-14 14:56:33

9

你不能。如果你有一個叫做isBiggerThanMaxLong(long)的方法,它應該總是返回false

如果您要遞增Long.MAX_VALUE的位,則下一個值應爲Long.MIN_VALUE。閱讀二進制補碼,這應該告訴你爲什麼。

3

首先,下面的方法不會編譯,因爲它缺少返回類型,它應該是Long.MAX_VALUE,而不是Long.Max_value

public static isBiggerThanMaxLong(long l){ 
     return l>Long.Max_value; 
} 

上述方法不能返回true你與Long.MAX_VALUE比較一個long值,看到方法簽名,你可以只傳遞long there.Any long可大如Long.MAX_VALUE,它不能比那更大。

你可以嘗試這樣的事情與BigInteger類:

public static boolean isBiggerThanMaxLong(BigInteger l){ 
    return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false; 
} 

下面的代碼將返回true

BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE). 
        add(BigInteger.valueOf(Long.MAX_VALUE)); 
System.out.println(isBiggerThanMaxLong(big3)); // prints true 
2

如果triangle.lborderA確實是一個長期再在原代碼的測試是平凡真的,而且沒有辦法來測試它。這也是無用的。

但是,如果triangle.lborderA是double,則比較是有用的,可以進行測試。 isBiggerThanMaxLong(1e300)確實返回true。

public static boolean isBiggerThanMaxLong(double in){ 
    return in > Long.MAX_VALUE; 
    } 
+0

isBiggerThanMaxLong(Long.MAX_VALUE + 1.0)將返回false。 isBiggerThanMaxLong(Long.MAX_VALUE + 1024.0)也將返回false。你用雙打> = Long.MAX_VALUE + 1025.0 – Samil 2014-11-21 12:06:40

+0

@Samil True。對於任何大於Long.MAX_VALUE的double,它都會返回true,其中有很多。由於浮點舍入,Long.MAX_VALUE + 1.0不是其中之一。 – 2014-11-21 14:32:55

0

您可以嘗試的BigInteger儘管其使用是複雜的...