不使用 if 语句递减一个值并返回到最大值?

vex*_*exe 4 c bit-manipulation bitwise-operators decrement

递增并回零很容易:

i = (i + 1) % Max;
Run Code Online (Sandbox Code Playgroud)

但递减并不是那么简单。基本上,要递减并换行,您通常会找到如下代码:

i--;
if (i < 0)
   i = Max;
Run Code Online (Sandbox Code Playgroud)

如果不使用 if 语句,我们如何编写前面的代码呢?

我知道可能会涉及按位运算符。通常,当我遇到此类问题时,我会尝试提出一些包含两项 A 和 B 的方程,然后尝试找到这两项的实际值。例如:

i = A + B
Run Code Online (Sandbox Code Playgroud)

如果i在范围内]0, Max]那么我们会得到:

i = 0 + BB = i-1

否则如果i == 0

i = A + 0A = Max

同样我们可以写:

i = i == 0 ? Max : i - 1;
Run Code Online (Sandbox Code Playgroud)

如何在没有任何 if 或三元运算符的情况下编写前面的方程?我尝试了很多按位运算和不同的算术组合,但没有成功。

有任何想法吗?

Dav*_*nro 5

i = (Max-1 + i)%Max
Run Code Online (Sandbox Code Playgroud)

只要 就可以工作0<=i<Max

  • 抱歉,我的答案是您的增量示例的精确减量模拟,“(i+1)%Max”。仔细阅读你的文章的其余部分,看起来你想要的是`(Max-i)%(Max+1)`,也就是说你想循环遍历`Max+1`值Max,Max-1, ..., 0, 最大, 最大-1, ... (2认同)