Scala中的无符号整数

时间:2018-10-31 17:02:35

标签: scala scala-collections

我需要只存储正值。据我了解,符号可以存储正值和负值。 Scala中是否有任何无符号整数,双精度数据类型?

致谢

3 个答案:

答案 0 :(得分:1)

有人建议在scala中为unsigned Int包括新的数据类型,但是这会对性能产生影响。因此,维护scala的人们决定不继续使用scala中未签名的Int的提议。

有关完整的详细信息,请参阅以下https://docs.scala-lang.org/sips/rejected/unsigned-integers.html

您也可以参考Unsigned variables in Scala

答案 1 :(得分:0)

Scala不拥有unsigned int,但是您可以使用spire库,它们具有UByte,UShort,UInt和ULong等。请在这里https://github.com/non/spire/blob/master/GUIDE.md

答案 2 :(得分:-1)

Scala不支持无符号整数,但是您可以采用类似的解决方法。

scala> val x = 2147483647
x: Int = 2147483647

scala> val y = x+4
y: Int = -2147483645

在这里,您希望y的值为2147483651,而不是由Integer类型限制的负值。 要获得正值,可以使用BigInt库。获取整数值的字节序列,然后 给它加上另一个“零”作为前缀,以便使整个值现在变为正数。

scala> import scala.math.BigInt
import scala.math.BigInt

scala> val prefix:Array[Byte]=Array(0)
prefix: Array[Byte] = Array(0)

scala> val y = BigInt(prefix ++ BigInt(x+4).toByteArray)
y: scala.math.BigInt = 2147483651

scala>

您可以将其包装为这样的功能

scala> def unsignedInt(a:Integer):scala.math.BigInt=
     | {
     |  val prefix:Array[Byte]=Array(0)
     |  BigInt(prefix ++ BigInt(a).toByteArray)
     | }
unsignedInt: (a: Integer)scala.math.BigInt

scala> unsignedInt(x)+unsignedInt(4)
res31: scala.math.BigInt = 2147483651

scala>