Сообщения

Символы в Kotlin

Изображение
Символы в Kotlin представлены типом Char . Их нельзя трактовать напрямую как числа fun check(c: Char) { if (c == 1) { // ОШИБКА: несовместимые типы // ... } } Символьные литералы идут в одинарных кавычках: '1'. Специальные символы могут быть экранированы с помощью обратной косой черты. Поддерживаются следующие escape-последовательности: \t, \b, \n, \r, \', \", \\ и \$. Чтобы кодировать любой другой символ, используйте синтаксис escape-последовательности Unicode: '\uFF00'. Мы можем явно преобразовать символ в Int число: fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') throw IllegalArgumentException("Out of range") return c.toInt() - '0'.toInt() // Явные преобразования в числа } Как и числа, символы помещаются в контейнер, когда требуется обнуляемая ссылка. Идентичность не сохраняется в результате операции помещения в контейнер. Читайте также: Операции с числовыми типам...

Сравнение чисел с плавающей точкой в Kotlin

Изображение
Операции над числами с плавающей запятой, обсуждаемые в этом посте: Проверка на равенство: a == b и a != b Операторы сравнения: a < b, a > b, a <= b, a >= b Создание экземпляра диапазона и проверка диапазона: a..b, x in a..b, x !in a..b Когда операнды a и b статически известны как Float или Double или их обнуляемые аналоги (тип объявляется или выводится или является результатом умного приведения), операции над числами и диапазоном, который они формируют, соответствуют IEEE 754 стандарту для арифметики с плавающей точкой. Однако для поддержки общих вариантов использования и обеспечения общего упорядочения, когда операнды не статически типизированы как числа с плавающей запятой (например, Any, Comparable<...>, параметр типа), в операциях используются реализации equals и compareTo для Float и Double, который не соответствует стандарту, так что: NaN считается равным себе NaN считается больше, чем любой другой элемент, включая POSITIVE_INFINITY -0.0 считается ме...

Операции с числовыми типами в Kotlin

Изображение
Kotlin поддерживает стандартный набор арифметических операций над числами (+ - * / %), которые объявлены как члены соответствующих классов (но компилятор оптимизирует вызовы до соответствующих инструкций). Деление целых чисел Обратите внимание, что деление между целыми числами всегда возвращает целое число. Любая дробная часть отбрасывается. Например: val x = 5 / 2 //println(x == 2.5) // ERROR: Operator '==' cannot be applied to 'Int' and 'Double' println(x == 2) Это верно для деления между любыми двумя целочисленными типами. val x = 5L / 2 println(x == 2L) Чтобы вернуть тип с плавающей точкой, явно преобразуйте один из аргументов в тип с плавающей точкой. val x = 5 / 2.toDouble() println(x == 2.5) Побитовые операции Что касается побитовых операций, то для них нет специальных символов, а только именованные функции, которые можно вызывать в инфиксной форме, например: val x = (1 shl 2) and 0x000FF000 Вот полный список побитовых опера...

Числовые типы в Kotlin: представление, явные преобразования

Изображение
Представление На платформе Java числа физически хранятся в виде примитивных типов JVM, если только нам не нужна ссылка на обнуляемое число (например, Int?) Или не используются дженерики. В последних случаях числа имеют обертку. Обратите внимание, что обертывание чисел не обязательно сохраняет идентичность: val a: Int = 10000 println(a === a) // Печатает 'true' val boxedA: Int? = a val anotherBoxedA: Int? = a println(boxedA === anotherBoxedA) // !!!Печатает 'false'!!! С другой стороны, это сохраняет равенство: val a: Int = 10000 println(a == a) // Печатает 'true' val boxedA: Int? = a val anotherBoxedA: Int? = a println(boxedA == anotherBoxedA) // Печатает 'true' Явные преобразования Из-за разных представлений меньшие типы не являются подтипами больших. Если бы они были, у нас были бы проблемы следующего вида: // Гипотетический код, на самом деле не компилируется: val a: Int? = 1 // обернутый Int (java.lang.Integer) val b: Long? = a /...

Литеральные константы чисел в Kotlin

Изображение
Существуют следующие виды литеральных констант для целочисленных значений: Десятичные: 123 Long обозначены заглавными буквами L: 123L Шестнадцатеричные: 0x0F Двоичные: 0b00001011 ПРИМЕЧАНИЕ. Восьмеричные литералы не поддерживаются. Kotlin также поддерживает обычные обозначения для чисел с плавающей точкой: По умолчанию Double: 123.5, 123.5e10 Float помечены f или F: 123.5f Подчеркивания в числовых литералах (с версии 1.1) Вы можете использовать подчеркивания, чтобы сделать числовые константы более читабельными: val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010 Читайте также: Числовые типы в Kotlin

Числовые типы в Kotlin

Изображение
В Kotlin все является объектом в том смысле, что мы можем вызывать функции-члены и свойства для любой переменной. Некоторые из типов могут иметь специальное внутреннее представление - например, числа, символы и логические значения могут быть представлены как примитивные значения во время выполнения - но для пользователя они выглядят как обычные классы. Kotlin предоставляет набор встроенных типов, которые представляют числа. Для целых чисел существует четыре типа с разными размерами и, следовательно, диапазонами значений. Тип Размер (битов) Минимальное значение Максимальное значение Byte 8 -128 127 Short 16 -32768 32767 Int 32 -2,147,483,648 (-2 exp 31) 2,147,483,647 ((2 exp 31) - 1) Long 64 -9,223,372,036,854,775,808 (-2 exp 63) 9,223,372,036,854,775,807 ((2 exp 63) - 1) Все переменные, инициализированные целочисленными значениями, не превышающими максимальное значение Int, имеют предполагаемый тип Int. Если начальное значение превышает это значение,...