web-dev-qa-db-ja.com

Java unsigned long longと同等ですか?

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

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

103
eleven81

私はそうは思わない。署名済みのlongよりも大きくしたい場合、 BigInteger が唯一の(箱から出して)行く方法だと思います。

55
Sean Bright

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

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

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

String l1Str = Long.toUnsignedString(l1)

それから

System.out.println(l1Str);
132
Amr

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

12
Adam Rosenfield

いいえ、ありません。 Javaの設計者は、符号なしintが嫌いだと言っているようです。代わりに BigInteger を使用してください。詳細については この質問 をご覧ください。

7
Paul Tomblin

Java 8 は、これらのLong変数を符号なしLongとして直接処理できる一連の符号なしlong操作を提供します。一般的に使用されるものを次に示します。

また、加算、減算、乗算は、符号付きlongと符号なしlongで同じです。

6
keelar

実行しようとしている操作に応じて、結果はほぼ同じで、署名されているかどうかに関係ありません。ただし、簡単な操作を使用していない限り、BigIntegerを使用することになります。

4
Peter Lawrey

Unsigned longの場合、 nsignedLong class fromGuava libraryを使用できます。

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

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

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

4
Andrejs

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

3
basszero

Org.Apache.axis.typesパッケージには

UnsignedLongクラス。

mavenの場合:

<dependency>
    <groupId>org.Apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>
2
user637338

Java 8のように見えます いくつかのメソッドが追加されます Longに、古い良い[signed] longを符号なしとして扱います。回避策のようですが、時々役立つかもしれません。

0
Mikalai Sabel