我需要只存储正值。据我了解,符号可以存储正值和负值。 Scala中是否有任何无符号整数,双精度数据类型?
致谢
答案 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>