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]长的未签名。 看起来像一个解决方法,但可能有时帮助。