Gre*_*nie 6 language-agnostic algorithm math
我想将值减一,如果它达到零,则将其设置为最大值.有没有办法通过数学来做到这一点而不诉诸if (n-1 == 0) { n = max; }
将值增加1然后在大于max时将其设置为零的相反情况可以很容易地实现n = (n + 1) % (max + 1);.此外,这甚至更好,因为你可以增加任何数量(不只是一个),它仍然会"正确""包裹".
谢谢你到目前为止的答案.要清楚,我的意思是没有任何布尔逻辑(if/else)或布尔运算符(!,&&等).我只是好奇如何做到这一点.只要提供评论,下面的正确答案是否真的让它更难以理解?对于更一般的情况,有必要使用它来减去任意数字并期望正确的环绕.
n = max - ((max - n +1)%max)
Run Code Online (Sandbox Code Playgroud)
如果你纯粹出于性能原因这样做,那么我会反对它.%在大多数架构上通常都是相当昂贵的操作 - 简单的比较,分支和添加通常会更有效.当然,关于投机/过早优化的常见警告适用.