Курс 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 тест за змістом цієї теми.

Навігація курсом

Тест — Нативні типи   |   Тест — Переповнення


💪 Або перейдіть одразу до вправ цього розділу.