C++では、unsigned long long int
またはuint64_t
を介して、64ビットの符号なし整数にアクセスできました。さて、Javaのlongは64ビットです。ただし、署名されています。
Javaプリミティブとして使用可能な符号なしlong(long)はありますか?どうやって使うの?
私はそうは思わない。署名済みのlongよりも大きくしたい場合、 BigInteger が唯一の(箱から出して)行く方法だと思います。
Java 8以降、unsigned long(unsigned 64ビット)のサポートがあります。使用方法は次のとおりです。
Long l1 = Long.parseUnsignedLong("17916881237904312345");
それを印刷するには、単にl1を印刷することはできませんが、最初に行う必要があります。
String l1Str = Long.toUnsignedString(l1)
それから
System.out.println(l1Str);
いいえ、ありません。プリミティブなlong
データ型を使用して符号付きの問題に対処するか、 BigInteger
などのクラスを使用する必要があります。
いいえ、ありません。 Javaの設計者は、符号なしintが嫌いだと言っているようです。代わりに BigInteger を使用してください。詳細については この質問 をご覧ください。
Java 8 は、これらのLong変数を符号なしLongとして直接処理できる一連の符号なしlong操作を提供します。一般的に使用されるものを次に示します。
また、加算、減算、乗算は、符号付きlongと符号なしlongで同じです。
実行しようとしている操作に応じて、結果はほぼ同じで、署名されているかどうかに関係ありません。ただし、簡単な操作を使用していない限り、BigIntegerを使用することになります。
Unsigned longの場合、 nsignedLong class fromGuava libraryを使用できます。
さまざまな操作をサポートします。
現時点で不足していると思われるのは、バイトシフト演算子です。それらが必要な場合は、JavaのBigIntegerを使用できます。
Javaには符号なしの型はありません。既に述べたように、BigIntegerのオーバーヘッドを軽減するか、JNIを使用してネイティブコードにアクセスします。
Org.Apache.axis.typesパッケージには
UnsignedLongクラス。
mavenの場合:
<dependency>
<groupId>org.Apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
Java 8のように見えます いくつかのメソッドが追加されます Longに、古い良い[signed] longを符号なしとして扱います。回避策のようですが、時々役立つかもしれません。