在不使用 if 语句的情况下递减一个值并返回到最大值?

Decrementing a value and wrapping back to a max value without using if statement?

递增并返回到零很容易:

i = (i + 1) % Max;

但是递减并不是那么简单。基本上递减和包装你通常会找到这样的代码:

i--;
if (i < 0)
   i = Max;

前面的代码不用if语句怎么写呢?

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

i = A + B

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

i = 0 + BB = i-1

否则如果i == 0:

i = A + 0A = Max

同样我们可以这样写:

i = i == 0 ? Max : i - 1;

如何在没有任何 ifs 或三元运算符的情况下写出前面的等式?我尝试了很多按位运算和不同的算术组合,但都无济于事。

有什么想法吗?

您可以修改它以适应您需要的范围

var offset, 
    max = 10, 
    str = '', 
    counter = document.getElementById('counter');

for(var i = 0; i < (max * max); i++){
  offset = ((max + i) % max);
  str += (max - offset)+"<br/>";
}

counter.innerHTML = str;
<div id='counter'></div>

i = (Max-1 + i)%Max

只要 0<=i<Max 就有效。