На этом шаге мы перечислим основные числовые типы.
Все числовые типы в Kotlin, как и в Java, имеют знак, то есть они могут представлять положительные и отрицательные числа. Кроме поддержки дробных значений числовые типы различаются количеством битов, которое занимают в памяти, и максимальным и минимальным значениями.
В таблице 1 перечислены некоторые числовые типы в Kotlin, количество битов и максимальное/минимальное значение, поддерживаемое этим типом.
Тип | Битов | Макс. значение | Мин. значение |
---|---|---|---|
Byte | 8 | 127 | 1 |
Short | 16 | 32767 | -32768 |
Int | 32 | 2147483647 | -2147483648 |
Long | 64 | 9223372036854775807 | -9223372036854775808 |
Float | 32 | 3.4028235E38 | 1.4E-45 |
Double | 64 | 1.7976931348623157E308 | 4.9E-324 |
Какая связь между размером типа в битах и максимальным и минимальным значениями? Компьютеры хранят целые числа в двоичной форме с фиксированным числом битов. Бит может иметь только одно из двух значений: 0 или 1.
Для представления числа Kotlin использует ограниченное число битов, в зависимости от выбранного числового типа. Крайний левый бит выражает знак (плюс или минус). Остальные биты выражают степени 2, где самый правый бит представляет 20. Чтобы вычислить значение двоичного числа, надо сложить все степени 2, соответствующих битам 1.
На рисунке 1 показан пример представления числа 42 в двоичной форме.
Рис.1. Представление числа 42 в двоичном виде
Тип Int содержит 32 бита, поэтому самое большое значение, которое может хранить Int, в двоичной форме представлено 31 единицей. Если сложить все степени двойки, то получим наибольшее значение для типа Int в Kotlin - 2147483647.
Так как число битов определяет максимальное и минимальное значение, которое может представлять числовой тип, разница между типами - это количество битов, доступных для выражения числа. Тип Long использует 64 бита вместо 32, значит, может хранить намного большее (263).
Немного о Short и Byte: оба типа редко используются для представления традиционных чисел. Они применяются в особых случаях и для поддержки совместимости со старыми Java-программами. Например, тип Byte можно использовать для чтения потока данных из файла или при работе с графикой (цвет пиксела часто выражается тремя байтами: по одному для каждого цвета в RGB).
Тип Short иногда используется для работы с машинным кодом процессоров, не поддерживающих 32-битные команды. Однако в большинстве случаев для представления целых чисел используется тип Int, а если нужно большее допустимое значение, - тип Long.
На следующем шаге мы рассмотрим целочисленные значения.