#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.