Java相当于unsigned long long?

时间:2009-02-03 19:50:27

标签: java unsigned primitive unsigned-long-long-int

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

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

10 个答案:

答案 0 :(得分:130)

启动Java 8,支持无符号长(无符号64位)。您可以使用它的方式是:

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

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

String l1Str = Long.toUnsignedString(l1)

然后

System.out.println(l1Str);

答案 1 :(得分:55)

我不相信。一旦你想要超过签名长,我认为BigInteger是唯一的(开箱即用)方式。

答案 2 :(得分:12)

不,没有。您必须使用原始long数据类型并处理签名问题,或使用BigInteger等类。

答案 3 :(得分:7)

不,没有。 Java的设计者正在记录中说他们不喜欢无符号的整数。请改用BigInteger。有关详细信息,请参阅this question

答案 4 :(得分:6)

Java 8提供了一组无符号长操作,允许您直接将那些Long变量视为unsigned Long,这里有一些常用的:

对于有符号和无符号长整数,加法,减法和乘法是相同的。

答案 5 :(得分:4)

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

答案 6 :(得分:4)

对于无符号长,您可以使用 UnsignedLong 中的Guava library课程:

它支持各种操作:

  • 减去
  • MOD
  • dividedBy

目前似乎缺少的是字节移位运算符。如果您需要那些,可以使用Java中的BigInteger。

答案 7 :(得分:3)

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

答案 8 :(得分:1)

org.apache.axis.types包有一个

UnsignedLong class。

对于maven:

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

答案 9 :(得分:0)

似乎在Java 8 some methods are added中对Long来说将旧的[签名]长期视为未签名。似乎是一种解决方法,但有时可能有所帮助。