Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Нативни типове   |   Тест — Препълване


💪 Или преминете направо към упражненията в този раздел.