4.5. Основы Kotlin. Хранение данных в памяти компьютера

В этом разделе мы поговорим о том, как различные элементы программы сохраняются в памяти PC. Поскольку данное пособие посвящено Котлину как JVM-языку, они сохраняются в памяти JVM как виртуального компьютера. Тем не менее, организация памяти JVM имеет немало общего с организацией памяти настоящего компьютера. Поговорим об этом подробнее.

Биты, байты и килобайты

Единицей измерения информации (например, хранящейся в памяти или на диске) является бит — элементарная ячейка, имеющая всего два состояния (0 и 1, либо true и false). Биты объединяеются в байты — в одном байте 23 = 8 бит. Байты, в свою очередь, объединяются в килобайты (Кб) — в одном килобайте 210 = 1024 байт. Обратите внимание — не 1000 байт, а именно 1024 байт, поскольку компьютеру удобнее, чтобы данные размерности были степенями двойки. В свою очередь, в одном мегабайте (Мб) 1024 Кб, в одном гигабайте (Гб) 1024 Мб, в одном терабайте (Тб) 1024 Гб.

Системы счисления

При хранении чисел в компьютере используется не привычная человеку десятичная система счисления, а более удобная для компьютера двоичная система. При этом используется всего две цифры: 0 и 1. К примеру, число 75 в двоичной системе представляется как 1001011 = 1 х 64 + 0 х 32 + 0 х 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1.

Поскольку двоичная запись числа является очень длинной, иногда (для удобства связи между человеком и компьютером) программисты применяют восьмеричную системму счисления (в ней восемь цифр от 0 до 7) и шестнадцатеричную систему счисления (в ней, помимо традиционных цифр от 0 до 9, используются цифры a = 10, b = 11, c = 12, d = 13, e = 14, f = 15). Удобство состоит в том, что одной восьмеричной цифре соответствует ровно три двоичных — к примеру, 5 = 101, а одной шестнадцатеричной — ровно четыре двоичных, к примеру, b = 1011. 75 представляется как 113 в восьмеричной и как 4b в двоичной системе счисления.

Шестнадцатеричную константу в Котлине можно записать с префиксом 0x: к примеру, 0x4b. Восьмеричные константы в Котлине не поддерживаются, а двоичные начинаются с префикса 0b: к примеру, 0b1001011. Подробнее о системах счисления и способах перевода чисел из одной системы в другую можно прочитать в статьях Википедии “Система счисления” и “Позиционная система счисления”.

Целые числа

Целые числа типа Int занимают в памяти четыре байта, или 32 бита, при хранении используется двоичная система счисления. Модуль числа занимает 31 бит из 32, старший бит занимает знак (он равен 0 для положительных и -1 для отрицательных чисел). Модуль положительных чисел хранится обычным образом, а отрицательных — в так называемом дополнительном коде. При этом вместо модуля числа |x| в памяти хранится значение 231 - |x|, например, 231 - 1 для числа -1 или 0 для числа -231. Использование дополнительного кода позволяет упростить операции сложения и вычитания чисел для компьютера.

Помимо типа Int, в Котлине имеется ещё три целочисленных типа, а именно:

  • Byte — целое число от -128 до 127, занимает один байт;
  • Short — целое число от -32768 до 32767, занимает два байта;
  • Long — целое число от -263 до 263 - 1, занимает восемь байт.

Подобные целые числа устроены по тому же принципу, что и числа типа Int. Следует иметь в виду, что при работе с типом Long нельзя использовать литералы типа Int:

val long1: Long = 42  // Error!
val long2: Long = 42L // OK!

Вместо них используются литералы типа Long с суффиксом L.

Как правило, в программах используется именно тип Int для хранения целых чисел. Исключения составляют следующие случаи:

  • когда диапазон типа Int недостаточен для целей программы, следует использовать Long;
  • когда требуется сохранить большое (измеряемое, минимум, десятками тысяч) количество чисел с маленьким диапазоном — следует использовать Byte или Short для экономии памяти.

Додати коментар