web-dev-qa-db-ja.com

Long.MAX_VALUEよりも長い

Long.MAX_VALUEより大きい長い数値を取得するにはどうすればよいですか?

このメソッドがtrueを返すようにしたい:

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

そのメソッドはtrueを返すことができません。それがLong.MAX_VALUEpointです。 really名前が... falseの場合、混乱するでしょう。そして、それはLong.SOME_FAIRLY_LARGE_VALUEと呼ばれ、文字通り合理的な使用法はないはずです。 AndroidのisUserAGoat を使用するか、常にfalseを返す独自の関数をロールすることができます。

メモリ内のlongは、固定バイト数を使用することに注意してください。 Oracleから

long:longデータ型は、64ビットの符号付き2の補数整数です。最小値は-9,223,372,036,854,775,808で、最大値は9,223,372,036,854,775,807(両端を含む)です。 intが提供する値よりも広い範囲の値が必要な場合は、このデータ型を使用します。

基本的なコンピューターサイエンスまたは離散数学からわかるように、64ビットであるため、長い間2 ^ 64の可能な値があります。また、離散数学、数論、または常識からわかるように、可能性が有限である場合、そのうちの1つが最大でなければなりません。それはLong.MAX_VALUEです。したがって、「0以上1未満の整数はありますか?」数学的に無意味です。

実際に何かのために実際にこれが必要な場合は、BigIntegerクラスを使用します。

56
djechlin

できません。 isBiggerThanMaxLong(long)というメソッドがある場合は、常にfalseを返す必要があります。

Long.MAX_VALUEのビットをインクリメントする場合、次の値はLong.MIN_VALUEである必要があります。 2の補数を読むと、その理由がわかるはずです。

11
James Cronen

_triangle.lborderA_が実際に長い場合、元のコードのテストは非常に真であり、テストする方法はありません。それも役に立たない。

ただし、_triangle.lborderA_がdoubleの場合、比較は有用であり、テストできます。 isBiggerThanMaxLong(1e300)はtrueを返します。

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