Как Вы выполняете итерации назад по кольцевому буферу без условного выражения?

Итерация вперед через кольцевой буфер, не используя условное выражение легка с оператором остатка...

iterator = (iterator + 1) % buffer_size;

Я не могу ни за что в жизни выяснить обратную операцию, выполнив итерации назад.

13
задан Nick Strupat 9 August 2010 в 05:09
поделиться

2 ответа

Подходит ли вам iterator = (iterator + buffer_size - 1)% buffer_size ? Сделайте на один меньше, чем все наоборот.

16
ответ дан 2 December 2019 в 00:02
поделиться

Ответ Borealid работает. (примечание: итератор итератор изначально установлен на 0).

Другое решение:

iterator = buffer_size - 1 - (buffer_size - iterator)% buffer_size с итератором , изначально установленным на buffer_size .

0
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: