Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Нативные типы / Exercises / Циклическое переполнение
Решение: Циклическое переполнение
Вот возможное решение задачи.
Код
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.