Je souhaite diminuer une valeur de un et, si elle atteint zéro, la définir sur la valeur maximale. Existe-t-il un moyen de le faire via les maths sans avoir recours à if (n-1 == 0) { n = max; }
Existe-t-il un moyen d'implémenter cette logique booléenne très simple en utilisant uniquement des opérandes mathématiques (tels que mod)?
Le scénario inverse consistant à augmenter une valeur de un et à la définir sur zéro quand il est supérieur à max peut facilement être obtenu en utilisant n = (n + 1) % (max + 1);
. En outre, c'est encore mieux puisque vous pouvez augmenter de n'importe quelle quantité (pas seulement une) et il va encore "envelopper" correctement.
Merci pour les réponses à ce jour. Pour être clair, je voulais dire sans aucune logique booléenne (if/else) ou opérateurs booléens (!, & &, etc) du tout. J'étais juste curieux de savoir comment faire ça. Est-ce que la bonne réponse ci-dessous la rend vraiment plus illisible tant qu'un commentaire est fourni? Il serait nécessaire d'utiliser cela pour le cas plus général de soustraire un nombre arbitraire et d'attendre le bon enroulement.
Ozan pose une bonne question ci-dessous. Par curiosité, est-ce juste un casse-tête logique, ou y a-t-il une raison pour laquelle quelqu'un aurait besoin d'éviter les constructions de langage de base? – MightyE
Voir ci-dessus. L'utilisation de l'option if ne fonctionne que si vous en soustrayez une, et non si vous soustrayez un nombre arbitraire et attendez le même type de wrap-around que mod fournit. – GreenieMeanie