Pergunta

Iterrar a frente através de um tampão circular sem usar um condicional é fácil com o operador restante ...

iterator = (iterator + 1) % buffer_size;

Eu não posso para a vida de mim descobrir a operação reversa, iterando para trás.

Foi útil?

Solução

Faz iterator = (iterator + buffer_size - 1) % buffer_size Trabalho para você? Vá menos do que todo o caminho.

Outras dicas

A resposta de Borealid funciona. (Nota: iterator está definido como 0 inicialmente).

Outra solução é

iterator = buffer_size - 1 - (buffer_size - iterator) % buffer_size com iterator definido como buffer_size inicialmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top