Если непознанный байт переполняется, он переходит от 255 к 0, а vica versa -1 дает 255.
Можно ли переполнять его, например, 200? Без использования операторов if.
Оператор modulo делает то, что вы хотите, с некоторой обманкой для отрицательных значений:
int wrap(int x, int n) {
return x < 0 ? ((x % n) + n) % n : x % n;
}
// wrap(205, 200) == 5
// wrap(-1, 200) == 199
n - x
выполняет x
он отрицательный, поэтому результат положительный.
Переполнение достаточно просто:
unsigned int a = 150, b = 150;
a += b; // do an operation
a %= 200; // wrap it
Однако, с потоком, это немного сложнее (см. Запрос orlp для этого).
Чтобы уменьшить вероятность ошибки, если вы используете эту переменную несколько раз, в C++ с перегрузкой оператора вы можете создать класс, который имитирует целочисленный тип, который переносится после каждой операции с перегрузкой оператора.
Если вы не захотите учиться сбору, такое действие будет невозможно по нескольким причинам.
Примечание. Вышеупомянутое верно только в том случае, если вы хотите неявное переполнение; Модули позволяют выполнять явное переполнение.