Курс Raku / Розширені / Докладніше про вбудовані типи / Нативні типи 🆕 / Вправи / Циклічне переповнення
Розв’язання: Циклічне переповнення
Ось один із можливих варіантів розв’язання задачі.
Код
my uint8 $u = 250;
$u += 10;
say $u;
my uint8 $v = 0;
$v--;
say $v;🦋 Вихідний код можна знайти у файлі wrap-around.raku.
Вивід
4
255Коментарі
uint8охоплює діапазон від0до255, тобто 256 різних значень. Арифметика над ним фактично виконується за модулем 256.250 + 10дало б260, яке не вміщується. Воно загортається й опиняється на260 - 256 = 4вище від нижньої межі. Тож переповнення не обмежується переступанням верхнього краю на одиницю: будь-який результат за межами діапазону згортається назад усередину.У зворотний бік теж відбувається переповнення: зменшення
0не може дати-1у беззнаковому типі, тож воно загортається до максимуму —255.