115

unsigned long long intC ++では、、またはを介して64ビットの符号なし整数にアクセスできましたuint64_t。さて、Javaではlongは64ビットです。ただし、それらは署名されています。

Javaプリミティブとして利用可能なunsignedlong(long)はありますか?どうやって使うの?

4

10 に答える 10

149

Java 8 以降では、unsigned long (unsigned 64 ビット) がサポートされています。使用方法は次のとおりです。

Long l1 = Long.parseUnsignedLong("17916881237904312345");

それを印刷するには、単純に l1 を印刷することはできませんが、最初に次のことを行う必要があります。

String l1Str = Long.toUnsignedString(l1)

それで

System.out.println(l1Str);
于 2014-08-11T17:09:34.213 に答える
58

私はそうは思わない。署名されたlongよりも大きくなりたい場合は、 BigIntegerが(すぐに使用できる)唯一の方法だと思います。

于 2009-02-03T19:52:47.380 に答える
12

いいえ、ありません。プリミティブlongデータ型を使用して符号の問題に対処するか、などのクラスを使用する必要がありますBigInteger

于 2009-02-03T19:53:19.140 に答える
7

いいえ、ありません。Javaの設計者は、署名されていないintが好きではないと言っていると記録されています。代わりにBigIntegerを使用してください。詳細については、この質問を参照してください。

于 2009-02-03T19:53:04.883 に答える
7

Java 8は、これらの Long 変数を unsigned Long として直接扱うことができる unsigned long 操作のセットを提供します。一般的に使用されるものを次に示します。

また、加算、減算、および乗算は、signed と unsigned long で同じです。

于 2014-11-17T20:10:27.690 に答える
4

実行する予定の操作に応じて、結果はほとんど同じで、符号付きまたは符号なしです。ただし、簡単な操作を使用していない限り、BigIntegerを使用することになります。

于 2009-02-03T21:30:06.637 に答える
4

unsigned long の場合、 Guava ライブラリのUnsignedLongクラスを使用できます。

さまざまな操作をサポートしています。

  • プラス
  • マイナス
  • モッド
  • で割った

現時点で不足しているように見えるのは、バイトシフト演算子です。それらが必要な場合は、Java から BigInteger を使用できます。

于 2014-08-06T11:34:01.723 に答える
3

Java には unsigned 型がありません。既に述べたように、BigInteger のオーバーヘッドを負担するか、JNI を使用してネイティブ コードにアクセスします。

于 2009-02-03T20:06:59.380 に答える
2

org.apache.axis.types パッケージには

UnsignedLong クラス。

Mavenの場合:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>
于 2014-12-08T11:27:22.003 に答える