Есть ли способ реализовать эту очень простую логическую логику, используя только математические операнды (например, мод)? - PullRequest
6 голосов
/ 17 февраля 2010

Я хочу уменьшить значение на единицу, и, если оно достигнет нуля, установить максимальное значение. Есть ли способ сделать это с помощью математики, не прибегая к if (n-1 == 0) { n = max; }

Обратный сценарий увеличения значения на единицу и последующего обнуления, когда оно больше максимального, может быть легко достигнуто с помощью n = (n + 1) % (max + 1);. Кроме того, это даже лучше, так как вы можете увеличить на любую величину (не только на одну), и она все равно будет правильно «оборачиваться».

Спасибо за ответы. Чтобы было ясно, я имел в виду вообще без булевой логики (если / еще) или булевых операторов (!, && и т. Д.). Мне было просто любопытно, как это сделать. Действительно ли правильный ответ ниже действительно делает его более нечитаемым, пока предоставляется комментарий? Было бы необходимо использовать это для более общего случая вычитания произвольного числа и ожидания правильного переноса.

Ответы [ 11 ]

0 голосов
/ 17 февраля 2010

Почему бы просто не сравнить с 1?

if(n==1) { n = max; }

...