unsigned long long int
C ++では、、またはを介して64ビットの符号なし整数にアクセスできましたuint64_t
。さて、Javaではlongは64ビットです。ただし、それらは署名されています。
Javaプリミティブとして利用可能なunsignedlong(long)はありますか?どうやって使うの?
unsigned long long int
C ++では、、またはを介して64ビットの符号なし整数にアクセスできましたuint64_t
。さて、Javaではlongは64ビットです。ただし、それらは署名されています。
Javaプリミティブとして利用可能なunsignedlong(long)はありますか?どうやって使うの?
Java 8 以降では、unsigned long (unsigned 64 ビット) がサポートされています。使用方法は次のとおりです。
Long l1 = Long.parseUnsignedLong("17916881237904312345");
それを印刷するには、単純に l1 を印刷することはできませんが、最初に次のことを行う必要があります。
String l1Str = Long.toUnsignedString(l1)
それで
System.out.println(l1Str);
私はそうは思わない。署名されたlongよりも大きくなりたい場合は、 BigIntegerが(すぐに使用できる)唯一の方法だと思います。
いいえ、ありません。プリミティブlong
データ型を使用して符号の問題に対処するか、などのクラスを使用する必要がありますBigInteger
。
いいえ、ありません。Javaの設計者は、署名されていないintが好きではないと言っていると記録されています。代わりにBigIntegerを使用してください。詳細については、この質問を参照してください。
Java 8は、これらの Long 変数を unsigned Long として直接扱うことができる unsigned long 操作のセットを提供します。一般的に使用されるものを次に示します。
また、加算、減算、および乗算は、signed と unsigned long で同じです。
実行する予定の操作に応じて、結果はほとんど同じで、符号付きまたは符号なしです。ただし、簡単な操作を使用していない限り、BigIntegerを使用することになります。
unsigned long の場合、 Guava ライブラリのUnsignedLongクラスを使用できます。
さまざまな操作をサポートしています。
現時点で不足しているように見えるのは、バイトシフト演算子です。それらが必要な場合は、Java から BigInteger を使用できます。
Java には unsigned 型がありません。既に述べたように、BigInteger のオーバーヘッドを負担するか、JNI を使用してネイティブ コードにアクセスします。
org.apache.axis.types パッケージには
UnsignedLong クラス。
Mavenの場合:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>