在 C++ 中,我喜欢访问 64 位无符号整数 viaunsigned long long int
或 via uint64_t
。现在,我知道,在 Java 中 long 是 64 位。但是,它们已签名。
是否有可用作 Java 原语的 unsigned long (long)?我该如何使用它?
在 C++ 中,我喜欢访问 64 位无符号整数 viaunsigned long long int
或 via uint64_t
。现在,我知道,在 Java 中 long 是 64 位。但是,它们已签名。
是否有可用作 Java 原语的 unsigned long (long)?我该如何使用它?
从 Java 8 开始,支持 unsigned long(无符号 64 位)。您可以使用它的方式是:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
要打印它,你不能简单地打印 l1,但你必须首先:
String l1Str = Long.toUnsignedString(l1)
然后
System.out.println(l1Str);
我不相信。一旦你想要比有符号长的更大,我认为BigInteger是唯一的(开箱即用的)方法。
不,没有。您必须使用原始long
数据类型并处理签名问题,或者使用诸如BigInteger
.
不,没有。Java 的设计者公开表示他们不喜欢无符号整数。请改用BigInteger。有关详细信息,请参阅此问题。
Java 8提供了一组 unsigned long 操作,允许您直接将那些 Long 变量视为 unsigned Long,以下是一些常用的:
加法、减法和乘法对于有符号和无符号长整数是相同的。
根据您打算执行的操作,结果大致相同,有符号或无符号。但是,除非您使用微不足道的操作,否则您最终将使用 BigInteger。
对于 unsigned long,您可以使用Guava 库中的UnsignedLong类:
它支持各种操作:
目前似乎缺少的是字节移位运算符。如果您需要这些,您可以使用 Java 中的 BigInteger。
Java 没有无符号类型。如前所述,产生 BigInteger 的开销或使用 JNI 访问本机代码。
org.apache.axis.types 包有一个
UnsignedLong 类。
对于行家:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
似乎在 Java 8 中,一些方法被添加到 Long 以将旧的 [signed] long 视为无符号。似乎是一种解决方法,但有时可能会有所帮助。