Java中的无符号长整数

Spr*_*Gr8 11 java unsigned biginteger long-integer

目前,我使用的是有符号值,-2 ^ 63到2 ^ 63-1.现在我需要相同的范围(2*2 ^ 64),但只有正值.我发现java文档提到unsigned long,它适合这种用法.

我试图将2 ^ 64声明为一个Long包装器对象,但它仍然丢失了数据,换句话说,它只捕获到了Long.MAX_VALUE,所以我显然遗漏了一些东西.是BigInteger的签署久,Java支持?

是否有关于如何声明和使用它的定义或指针?

Ste*_*n C 10

Java没有unsigned long类型,但long如果你小心,你可以将带符号的64位二进制补码整数(即)视为无符号整数.

许多原始整数运算是"符号不可知的"; 例如,您可以使用Java原语加法,减法和乘法,并获得使用表示的无符号数的"正确"答案long.

对于其他操作,例如分裂和比较,Long类提供方法等divideUnsigned,并compareUnsigned会给用于表示为无符号数正确的结果long的值.

(这些操作是在Java 8中添加的.在此之前,您可以使用第三方库;例如静态方法com.google.common.primitives.UnsignedLongs.)


xen*_*ros 8

在Java 8中,unsigned long引入了支持。不过,这些是典型的多头,但符号不影响加法和减法。为了进行划分和比较,您可以使用中的专用方法Long。另外,您可以执行以下操作:

long l1 = Long.parseUnsignedLong("12345678901234567890");
String l1Str = Long.toUnsignedString(l1)
Run Code Online (Sandbox Code Playgroud)

BigInteger有点不同。它可以保留大量数据。它将它们存储为int[]并支持算术。