Просто чтобы спросить: почему вы хотите избежать логической операции?
Если вы хотите избежать условного кода в вашем приложении, вы можете использовать логические выражения, которые хранятся в логических значениях.Они будут сопоставлены с инструкциями SETcc на i386, и я предполагаю, что аналоговые инструкции существуют на других ISA.
В этом случае вы можете использовать логическое выражение и при этом иметь безусловный код, и вы можете использовать:
В предположении, что логический результат true равен Ordinal 1 (это имеет место в коде Delphi), а логическое значение false равно 0, вы можете написать
next := current - 1 + ( ( 1 + max ) and -Ord( current = 0 ) );
Неотклоните это, потому что я дал ответ с логическими операциями.Я просто хочу проверить, не является ли это отличным решением основной проблемы.
Тем не менее: я думаю, что условный код гораздо более читабелен.