Java相当の符号なしlong long?
-
21-08-2019 - |
質問
C++では、楽しかったアクセスに64ビット符号無し整数、 unsigned long long int
, は以下のとおりで uint64_t
.現在、Javaのlong値は64ビットったんですね、わかります。ただし、これらが署名した。
ある符号なしlong(長)として、Javaプリミティブ?使い方を教えてくださいね。
解決
私はそう信じていません。あなたが長い署名よりも大きく移動したいならば、私は考えますBigIntegerのには移動するための方法(箱から出して)だけです。
他のヒント
のJava 8以降では、unsigned long型(符号無し64ビット)のサポートがあります。あなたはそれを使用することができる方法があります:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
これを印刷するには、単にL1を印刷することはできませんが、最初に持っています:
String l1Str = Long.toUnsignedString(l1)
そして、
System.out.println(l1Str);
いいえ、ありません。あなたは原始的long
データ型を使用し、符号の有無の問題に対処する、またはそのような<のhref = "http://java.sun.com/javase/6/docs/api/java/math/としてクラスを使用する必要がありますBigInteger.html」のrel = "noreferrer"> BigInteger
でます。
いいえ、ありません。ジャワの設計者は、彼らは、符号なし整数型を好きではなかったと言っとして記録にあります。 のBigInteger の代わりを使用してください。 をhref="https://stackoverflow.com/questions/430346/why-doesnt-java-support-unsigned-ints">参照してください。
Java8 セットを提供符号なしlong操作ることを可能にするに扱う人長変数として符号なしLong、ここちよく使われるもの:
- 文字列 toUnsignedString(long i)
- int compareUnsigned(long x、長y)
- 長 divideUnsigned(long配当金は、長divisor)
- 長 remainderUnsigned(long配当金は、長divisor)
や追加、subtractions、multiplicationsにおいて同じ署名を付けるlong.
あなたが実行しようとする操作に応じて、結果は符号付きまたは符号なし、ほぼ同じです。あなたは些細な操作を使用している場合を除きしかし、あなたはBigIntegerのを使用して終了します。
のための符号なしlongを使用でき UnsignedLong クラスから グァバの図書館:
対応して様々な業務:
- プラス
- マイナス
- 倍
- mod
- dividedBy
ものと思われる欠点はバイトシフト。が必要な場合はその利用できるBigIntegerからJava.
Javaのない符号なします。既述のように、incureオーバーヘッドの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 [署名]。回避策のように思えるが、時には助けてます。