Почему Kotlin не поддерживает целые числа без знака? - PullRequest
0 голосов
/ 07 мая 2018

Недавно я столкнулся с ситуацией, в которой целое число без знака было бы действительно полезным (например, любое отрицательное значение не имело бы смысла и т. Д.). Удивительно, но я обнаружил, что Kotlin не поддерживает целые числа без знака - и, похоже, нет ничего другого о том, почему (даже если я посмотрел).

Я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Начиная с Kotlin 1.3 доступны неподписанные типы, основанные на функции встроенных классов.

См. Раздел «Типы целых чисел без знака» выпуска 1.3-M1: https://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/

0 голосов
/ 07 декабря 2018

Как правильно указано glidor , беззнаковые аналоги Byte, Short, Int и Long существуют с Kotlin 1.3 , но будьте осторожны, поскольку они все еще экспериментальная :

Из документов :

kotlin.UByte: 8-разрядное целое число без знака, от 0 до 255
kotlin.UShort: 16-разрядное целое число без знака в диапазоне от 0 до 65535
kotlin.UInt: 32-разрядное целое число без знака, от 0 до 2 ^ 32 - 1
kotlin.ULong: 64-разрядное целое число без знака в диапазоне от 0 до 2 ^ 64 - 1

Использование

// You can define unsigned types using literal suffixes
val uint = 42u 

// You can convert signed types to unsigned and vice versa via stdlib extensions:
val int = uint.toInt()
val uint = int.toUInt()
0 голосов
/ 08 мая 2018

Почему у Kotlin нет собственных типов без знака

Это потому, что, как показывает этот вопрос, Java не имеет встроенных типов без знака.

При использовании в JVM Kotlin компилируется в байт-код Java, поэтому это ограничение для Java также распространяется на Kotlin.

Обходные

Вы можете использовать служебные методы Integer и Long для работы со значениями как без знака ссылка , но при этом все равно сохраняются значения с внутренней подписью.

Вы также можете написать служебный класс, который содержит значение и действует как тип unsigned int, но это может быть медленнее, чем при использовании метода, описанного выше.

...