Курс Raku / Розширені / Докладніше про вбудовані типи / Нативні типи 🆕 / Вправи / Циклічне переповнення

Розв’язання: Циклічне переповнення

Ось один із можливих варіантів розв’язання задачі.

Код

my uint8 $u = 250;
$u += 10;
say $u;

my uint8 $v = 0;
$v--;
say $v;

🦋 Вихідний код можна знайти у файлі wrap-around.raku.

Вивід

4
255

Коментарі

  1. uint8 охоплює діапазон від 0 до 255, тобто 256 різних значень. Арифметика над ним фактично виконується за модулем 256.

  2. 250 + 10 дало б 260, яке не вміщується. Воно загортається й опиняється на 260 - 256 = 4 вище від нижньої межі. Тож переповнення не обмежується переступанням верхнього краю на одиницю: будь-який результат за межами діапазону згортається назад усередину.

  3. У зворотний бік теж відбувається переповнення: зменшення 0 не може дати -1 у беззнаковому типі, тож воно загортається до максимуму — 255.

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

Циклічне переповнення   |   Нативний масив