Использование оператора модуля для переноса в обратном порядке

#c

#c

Вопрос:

Обычно я использую модуль, когда хочу обернуть число, т.е.

current = (current 1) % list.size()

В цикле это будет происходить 0,1,...,list.size()-1 до обтекания и возврата к 0. Мне было интересно, есть ли способ сделать это в обратном порядке, то есть способ, с которого я могу перейти, list.size()-1, list.size()-2,list.size()-3,...,2,1,0 прежде чем снова переходить к list.size()-1?

Комментарии:

1. Для обратного случая было бы достаточно сравнить значение с нулем (например, используя троичный оператор: current = current == 0 ? list.size() - 1 : current - 1; ). Операция модуля не требуется.

2. Вы используете неподписанные? Возможно, двоичные / логические файлы могут работать.

3. Если current инициализируется list.size() - 1 current = (current - 1)%list.size() , то это сделает then .

4. @Peter Это может быть проблематично ( -1 % list.size() не даст вам того, что вы ожидаете). Используйте (current list.size() - 1) % list.size() вместо этого.

5. @Peter 0xFFFFFFFF % N (для 32-разрядных значений) не будет N - 1 , если N не является степенью 2.