Java相当于unsigned long long?

在C ++中,我喜欢通过unsigned long long int或通过uint64_t访问64位无符号整数。 现在,在Java中,长度是64位,我知道。 但是,他们签署了。

是否有一个无符号的long(long)作为Java原始文件? 我如何使用它?

我不这么认为。 一旦你想要超过签名的长度,我认为BigInteger是唯一(开箱即可)的方式。

从Java 8开始,支持无符号长整型(无符号64位)。 你可以使用它的方式是:

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

要打印它,你不能简单地打印l1,但你必须先:

 String l1Str = Long.toUnsignedString(l1) 

然后

 System.out.println(l1Str); 

不,没有。 您将不得不使用原始long数据types并处理签名问题,或者使用诸如BigInteger类的类。

不,没有。 Java的devise者们正在logging说他们不喜欢未签名的整数。 改用BigInteger 。 看到这个问题的细节。

Java 8提供了一组无符号长操作,允许您将这些Longvariables直接作为无符号Long来处理,下面是一些常用的操作:

  • String toUnsignedString (long i)
  • int compareUnsigned (long x,long y)
  • 长分红 (长分红,长除数)
  • 长余额未付 (长分红,长除数)

对于已签名和未签名的long,加法,减法和乘法是相同的。

根据您打算执行的操作,结果是相同的,签名或未签名。 但是,除非使用平凡的操作,否则最终会使用BigInteger。

对于unsigned long,可以使用Guava库中的 UnsignedLong类:

它支持各种操作:

  • 减去
  • MOD
  • 除以

目前似乎缺less的东西是字节移位操作符。 如果您需要这些,您可以使用Java中的BigInteger。

Java没有无符号types。 如前所述,确保BigInteger的开销或使用JNI访问本机代码。

org.apache.axis.types包有一个

UnsignedLong类。

对于maven:

 <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> 

看起来像在Java 8中, 有些方法被添加到Long来处理旧的[signed]长的未签名。 看起来像一个解决方法,但可能有时帮助。