Java で UnsignedLong を作成する

Rupam Yadav 2023年10月12日
  1. Java で BigInteger を使用して符号なし長整数を作成する
  2. jOOUULong を使用した unsigned Long
Java で UnsignedLong を作成する

Java の long 変数は常に署名されており、常に負の値と正の値があります。ただし、以下で説明するいくつかの方法を使用して、一般的な long 変数を符号なし変数として使用および処理することもできます。

Java で BigInteger を使用して符号なし長整数を作成する

Java では、long のようなプリミティブ型は広範囲の大きな整数計算を提供します。

それでも、その範囲を超えるには、プリミティブ型が保持できるよりも大きな値に対して数学演算を実行するために使用できる BigInteger クラスを使用する必要があります。符号なしの long 値が大きいため、BigInteger を使用します。

この例では、最初に BigInteger クラスの valueOf() 関数を呼び出し、格納できる最大値である Long.MAX_VALUE を渡します。次に、保存する値を追加します。これは、BigInteger.valueOf() を使用して取得し、値を渡します。

BigInteger 値を long 値に変換するには、BigInteger.longValue() を使用し、Long.toUnsignedString() を呼び出して longValue を符号なし文字列として作成し、longValue 変数を渡します。。値が出力に出力されていることがわかります。これは正の数であり、符号なしの長い値であることを意味します。

import java.math.BigInteger;

public class UnsignedLongExample {
  public static void main(String[] args) {
    BigInteger bigInteger = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.valueOf(25634));

    long longValue = bigInteger.longValue();

    String longAsUnsignedString = Long.toUnsignedString(longValue);
    System.out.println(longAsUnsignedString);
  }
}

出力:

9223372036854801441

longValue を直接出力すると、long はまだ符号付き変数ですが、関数 toUnsignedString() が符号なし値の文字列に変換するため、負の値が得られます。

System.out.println(longValue);

出力:

-9223372036854750175

jOOUULong を使用した unsigned Long

符号なしの long 値を取得して使用する別の方法は、jOOU と呼ばれるサードパーティライブラリを使用することです。使用するには、次の Maven 依存関係をインポートする必要があります。

<dependency>
    <groupId>org.jooq</groupId>
    <artifactId>joou</artifactId>
    <version>0.9.4</version>
</dependency>

org.jooq.tools.unsignedULong クラスは、long 値を符号なしの値に変換するためのいくつかのメソッドを提供します。メソッドの 1つは、long 値をとる valueOf() メソッドです。

プログラムでは、BigInteger を作成し、ULong.valueOf() メソッドで、ULong オブジェクトを返す bigInteger.longValue() を使用して long 値を渡します。

import java.math.BigInteger;
import org.jooq.tools.unsigned.ULong;

public class UnsignedLongExample {
  public static void main(String[] args) {
    BigInteger bigInteger = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.valueOf(25634));

    ULong uLong = ULong.valueOf(bigInteger.longValue());
    System.out.println(uLong);
  }
}

出力:

9223372036854801441
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Long