无符号长度的 Java 等价物?

在 C + + 中,我喜欢通过 unsigned long long intuint64_t访问64位无符号整数。我知道,在 Java 中 longs 是64位的。但是,它们是经过签名的。

是否有一个无符号 long (long)可用作 Java 原语? 我如何使用它?

253318 次浏览

我不这么认为。一旦你想走大于一个签署长期,我认为 BigInteger是唯一(开箱即用)的方式去。

不,没有。Java 的设计者说过他们不喜欢无符号整型。使用 BigInteger代替。详情请参阅 这个问题

不,没有。您必须使用基本的 long数据类型并处理有符号性问题,或者使用诸如 BigInteger之类的类。

Java 没有无符号类型。如前所述,增加 BigInteger 的开销或使用 JNI 访问本机代码。

根据要执行的操作,结果大致相同,有签名或无签名。但是,除非您使用的是琐碎的操作,否则最终将使用 BigInteger。

似乎在 Java8some methods are added到 Long 中,把旧的好的(已签名的)只当作未签名的。看起来是个变通方案,但有时候可能会有帮助。

对于无符号长度,可以使用 番石榴图书馆中的 UnsignedLong类:

它支持各种业务:

  • 还有
  • 负号
  • 时间
  • 国防部
  • 除以

目前似乎缺少的是字节移位操作符。如果你需要这些,你可以使用来自 Java 的 BigInteger。

从 Java8开始,就支持无符号 long (无符号64位):

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

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

String l1Str = Long.toUnsignedString(l1)

然后

System.out.println(l1Str);

Java8 提供了一组无符号的长操作,允许您直接将这些 Long 变量视为无符号的 Long,下面是一些常用的操作:

对于有符号和无符号长度,加法、减法和乘法都是相同的。

Type 包有一个

没有签名,上课时间长。

专家:

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