在 Java 中建立無符號長整數
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
值轉換為無符號值的方法。其中一種方法是採用 long
值的 valueOf()
方法。
在程式中,我們建立一個 BigInteger
,然後在 ULong.valueOf()
方法中,我們使用返回 ULong
物件的 bigInteger.longValue()
傳遞 long
值。
import org.jooq.tools.unsigned.ULong;
import java.math.BigInteger;
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