我的教授不喜欢模数的使用,因为它不够有效,但我不确定如何使用逻辑运算符或其他东西得到相同的答案.有人可以帮我解决这个问题吗?
j = (j + 1) % a.length;
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
j = j + 1;
if (j >= a.length) {
j = j - a.length; // assumes j was less than length before increment
}
Run Code Online (Sandbox Code Playgroud)
@ajp 建议了另一种实际上可以正常工作的解决方案。
j = j + 1;
if (j >= a.length) { // assumes j was less than length before increment
j = 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我正在编写代码,我会这样写,以防万一。它几乎没有额外的开销,并且消除了“假设”
j = j + 1;
while (j >= a.length) {
j = j - a.length;
}
Run Code Online (Sandbox Code Playgroud)
当然,这%也是一个很好的方法。除非是你的教授。
这可能比除法/取模更快或更慢,具体取决于跳转的成本(以及对指令管道/前瞻的任何影响)和整数除法指令的效率。
旧处理器可能会因跳跃而做得更好。更现代的有鸿沟。