Целое число без знака в скале - PullRequest
0 голосов
/ 31 октября 2018

У меня есть требование хранить только положительные значения. Как я понимаю, подписанные могут хранить как положительные, так и отрицательные значения. Есть ли в Scala целочисленные, двойные типы данных без знака?

Привет

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Scala не имеет неподписанного int, но вы можете использовать библиотеку spire, у них есть UByte, UShort, UInt, ULong и т. Д. Пожалуйста, посмотрите здесь https://github.com/non/spire/blob/master/GUIDE.md

0 голосов
/ 31 октября 2018

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>
0 голосов
/ 31 октября 2018

Было предложено включить новые типы данных для неподписанного Int в scala, но это может повлиять на производительность. Следовательно, люди, которые поддерживают scala, решили не идти вперед с предложением неподписанного Int в scala.

Пожалуйста, обратитесь к следующим https://docs.scala -lang.org / sips / rejected / unsigned-inteers.html для получения полной информации.

Вы также можете ссылаться на переменные без знака в Scala .

...