Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Нативные типы / Exercises / Циклическое переполнение

Решение: Циклическое переполнение

Вот возможное решение задачи.

Код

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.

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

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