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 + B和B = i-1
否则如果i == 0:
i = A + 0和A = Max
同样我们可以写:
i = i == 0 ? Max : i - 1;
Run Code Online (Sandbox Code Playgroud)
如何在没有任何 if 或三元运算符的情况下编写前面的方程?我尝试了很多按位运算和不同的算术组合,但没有成功。
有任何想法吗?
i = (Max-1 + i)%Max
Run Code Online (Sandbox Code Playgroud)
只要 就可以工作0<=i<Max。