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
jOOU
の ULong
を使用した unsigned Long
符号なしの long
値を取得して使用する別の方法は、jOOU
と呼ばれるサードパーティライブラリを使用することです。使用するには、次の Maven 依存関係をインポートする必要があります。
<dependency>
<groupId>org.jooq</groupId>
<artifactId>joou</artifactId>
<version>0.9.4</version>
</dependency>
org.jooq.tools.unsigned
の ULong
クラスは、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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn