C ++では、64ビットの符号なし整数、、unsigned long long int
またはを介してアクセスできましたuint64_t
。現在、Javaではlongは64ビットです。ただし、署名されています。
Javaプリミティブとして利用可能なunsigned long(long)はありますか?どうやって使うの?
C ++では、64ビットの符号なし整数、、unsigned long long int
またはを介してアクセスできましたuint64_t
。現在、Javaではlongは64ビットです。ただし、署名されています。
Javaプリミティブとして利用可能なunsigned 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 ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
範囲チェックがないため、正確ではありませんが、そうでない場合、signed longの範囲を超える可能性のある長い数値入力を取り込むことができます。(Scanner::next(...)
PatternオブジェクトまたはStringパターンのいずれかを受け入れることもできるという事実を利用します。)
いいえ、ありません。プリミティブlong
データ型を使用して署名の問題に対処するか、などのクラスを使用する必要がありますBigInteger
。
いいえ、ありません。Javaの設計者は、未署名の整数が気に入らなかったと記録に残しています。代わりにBigIntegerを使用してください。詳細については、この質問を参照してください。
Java 8は、これらのLong変数をunsigned Longとして直接処理できる一連のunsigned long演算を提供します。一般的に使用されるものをいくつか次に示します。
また、加算、減算、乗算は、符号付きlongと符号なしlongで同じです。
unsigned longの場合、Guavaライブラリの UnsignedLongクラスを使用できます。
さまざまな操作をサポートします。
現在欠けているように見えるのはバイトシフト演算子です。それらが必要な場合は、JavaからBigIntegerを使用できます。
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をunsignedとして扱うように見えます。回避策のようですが、場合によっては役立つことがあります。