在C ++中,我喜欢通过unsigned long long int
或uint64_t
访问64位无符号整数。现在,在Java中,long是64位,我知道。但是,他们签了名。
是否有一个无符号长(长)可用作Java原语?我该如何使用它?
答案 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课程:
它支持各种操作:
目前似乎缺少的是字节移位运算符。如果您需要那些,可以使用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来说将旧的[签名]长期视为未签名。似乎是一种解决方法,但有时可能有所帮助。