Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Нативные типы
Типы с фиксированным размером и переполнение
Помимо обычного int, в Raku есть целочисленные типы
фиксированной разрядности: int8, int16,
int32, int64 и их беззнаковые аналоги
uint8, uint16, uint32,
uint64. Число в имени обозначает, сколько бит занимает
значение.
Фиксированная разрядность означает фиксированный диапазон.
int8 хранит значения от -128 до
127; uint8 — от 0 до
255. Поскольку размер хранилища не может увеличиваться,
выход за верхнюю границу приводит к «обороту» к нижней — это
переполнение:
my int8 $i = 127;
$i++;
say $i; # -128Прибавление единицы к наибольшему значению int8 не даёт
128 (которое не поместилось бы); вместо этого происходит
переход к наименьшему значению, -128. Беззнаковые типы
также переполняются:
my uint8 $u = 255;
$u++;
say $u; # 0Это противоположность обычного Int, который просто
увеличивается настолько, насколько нужно, и никогда не переполняется.
Компромисс — это и есть суть типов фиксированного размера: вы принимаете
ограниченный диапазон в обмен на предсказуемое, компактное и быстрое
хранение.
Используйте нативный тип фиксированного размера, когда вы знаете
диапазон ваших данных и хотите повысить эффективность — например, для
байтов двоичных данных в массиве uint8. Для обычной
арифметики, где числа могут расти без ограничений, используйте
Int.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест — Нативные типы | Тест — Переполнение →
💪 Или перейдите сразу к упражнениям этого
раздела.