Java等价于无符号long-long? 在C++中,我喜欢通过一个64代码的无符号整数,通过无符号长long int /COD>,或者通过 uint 64 t t 。现在,在Java中,long是64位的,我知道。然而,它们是签署的

Java等价于无符号long-long? 在C++中,我喜欢通过一个64代码的无符号整数,通过无符号长long int /COD>,或者通过 uint 64 t t 。现在,在Java中,long是64位的,我知道。然而,它们是签署的,java,unsigned,primitive,unsigned-long-long-int,Java,Unsigned,Primitive,Unsigned Long Long Int,是否有一个未签名的long(long)作为Java原语?我该如何使用它?我不这么认为。一旦你想变得比一个签名的长,我认为这是唯一(开箱即用)的方法。不,没有。Java的设计者公开表示他们不喜欢未签名的整数。改用a。有关详细信息,请参阅。不,没有。您必须使用原语long数据类型来处理有符号问题,或者使用一个类,例如。Java没有无符号类型。如前所述,产生BigInteger的开销或使用JNI访问本机代码。根据您打算执行的操作,结果大致相同,有符号或无符号。但是,除非您使用的是琐碎的操作,否则最终将

是否有一个未签名的long(long)作为Java原语?我该如何使用它?

我不这么认为。一旦你想变得比一个签名的长,我认为这是唯一(开箱即用)的方法。

不,没有。Java的设计者公开表示他们不喜欢未签名的整数。改用a。有关详细信息,请参阅。

不,没有。您必须使用原语
long
数据类型来处理有符号问题,或者使用一个类,例如。

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

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

在Java 8中,似乎将旧的good[signed]Long视为unsigned。似乎是一种解决方法,但有时可能会有所帮助。

对于未签名的long,您可以使用中的类:

它支持各种操作:

  • 加上
  • 减去
  • 时代
  • 国防部
  • 分开

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

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

Long l1 = Long.parseUnsignedLong("17916881237904312345");
要打印l1,您不能简单地打印l1,但必须首先:

String l1Str = Long.toUnsignedString(l1)
然后

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

  • 字符串(长i)
  • int(长x,长y)
  • 长(长除数、长除数)
  • 长(长除数、长除数)

有符号和无符号long的加法、减法和乘法是相同的。

org.apache.axis.types包有一个

未签名的长类

对于maven:

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

org.apache.axis
轴
1.4

我尊重高斯林的所作所为,但我认为他为没有未签名的ints辩护是我听过的最愚蠢的借口之一。:-)在Java中,我们得到了比未签名整数更多的不可靠的东西…:-)JavaPolis 2007的高斯林给出了一个令人困惑的例子,它不适用于无符号整数。Josh Bloch指出,它也不适用于签名Int。任意大小的整数ftw!BrianKnoblauch-yep,其创建的易受攻击代码实践。请参阅。@PP.:我认为不可能定义合理的规则,当签名类型和未签名类型中至少有一个定义了包装行为时,这些规则允许在签名类型和未签名类型之间进行自由交互。话虽如此,无符号字节或无符号短字符不会造成任何问题,因为字节无论如何都不会与其他类型交互。一个更大的问题是为用于表示数字的类型定义包装行为,这不同于为那些罕见的情况(如hashcode计算)定义单独的包装类型当包装行为真的有用时。@PP:我希望语言设计者能认识到区分数字和代数环的重要性(“包装整数”类型是什么)。任何大小的数字都应隐式转换为任何大小的环,但环只能通过函数或通过显式类型转换转换为数字,转换为相同大小的数字。C的行为,无符号类型通常表现为代数环,但有时表现为数字,可能是所有可能的世界中最糟糕的;我不能责怪高斯林想要避免这种情况,尽管他采取了完全错误的方法。char是一个无符号的16位值;)这个答案有点过时(发布于2009年)。从Java8(2014年3月发布)开始,就支持未签名的long。检查我在下面作为答案发布的一个示例。注意,接受的答案在Java8及更高版本中已经过时。请参阅以了解新特性,您可以要求Java将数字视为无符号。不适合日常使用,但在需要的时候很方便。快速查看源代码告诉我对这些方法要小心一点。当long确实为负数时(即与有符号大小写不同),将使用BigInteger类。这意味着最多将分配8个新的BigInteger,这是相当多的,而且肯定是性能下降。@j10,
Long ul1=Long.parseUnsignedLong(objScannerInstance.next(\\d+))不太优雅,因为它缺少范围检查,但它可以让您拉入长数值输入,否则可能会超出有符号长数值的范围。(利用了
Scanner::next(…)
也可以接受模式对象或字符串模式这一事实。)这很困难。
<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>