Курс 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 тест за змістом цієї теми.
Навігація курсом
← Тест — Нативні типи | Тест — Переповнення →
💪 Або перейдіть одразу до вправ цього
розділу.