52

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

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

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

5 に答える 5

88

そのメソッドは を返すことができませんtrue。それがポイントですLong.MAX_VALUE。その名前が...偽だったら、本当に混乱するでしょう。次に、それを呼び出すだけでLong.SOME_FAIRLY_LARGE_VALUE、合理的な用途が文字通りゼロになるはずです。Android のisUserAGoatを使用するか、常に を返す独自の関数をロールすることができますfalse

longメモリ内の a は固定バイト数を取る ことに注意してください。オラクルから

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

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

実際に何かのためにこれが実際に必要な場合は、BigIntegerクラスを使用してください。

于 2013-05-14T14:37:01.320 に答える
14

できません。呼び出されたメソッドがある場合、isBiggerThanMaxLong(long)常に を返す必要がありfalseます。

のビットをインクリメントするとLong.MAX_VALUE、次の値は になりますLong.MIN_VALUE。2 の補数を読めば、その理由がわかります。

于 2013-05-14T14:37:14.057 に答える
5

Long.MAX_VALUEまず、以下のメソッドは戻り値の型がなく、代わりにある必要があるためコンパイルされませんLong.Max_value

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

上記のメソッドは 、値を とtrue比較しているため、決して戻ることはできません。そこでのみ渡すことができるメソッド シグネチャを参照してください。longLong.MAX_VALUElonglongLong.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
于 2013-05-14T14:39:04.203 に答える
3

が実際に長い場合triangle.lborderA、元のコードのテストは自明に真であり、それをテストする方法はありません。それも無駄です。

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

  public static boolean isBiggerThanMaxLong(double in){
    return in > Long.MAX_VALUE;
  }
于 2013-05-14T15:15:30.390 に答える