【发布时间】:2021-02-04 03:29:21
【问题描述】:
假设我正在递增或递减一个索引,我将使用该索引在数组中移动。
数组从索引 0 开始,到索引 4 结束。如果我在索引 0 并且想要向后移动 1 个索引,我应该在索引 4 结束(环绕)。
这可能非常简单,但由于某种原因,我无法想出一个可以给出这个结果的公式。 “环绕加法”非常简单:索引 % 5 + 1,但我就是不知道减法。
【问题讨论】:
标签: math computer-science
假设我正在递增或递减一个索引,我将使用该索引在数组中移动。
数组从索引 0 开始,到索引 4 结束。如果我在索引 0 并且想要向后移动 1 个索引,我应该在索引 4 结束(环绕)。
这可能非常简单,但由于某种原因,我无法想出一个可以给出这个结果的公式。 “环绕加法”非常简单:索引 % 5 + 1,但我就是不知道减法。
【问题讨论】:
标签: math computer-science
正确的加法公式是(index + 1) % 5。当index 为 4 时,您的版本给出了错误的结果。
正确的减法公式取决于您使用的语言中 % 运算符的行为:
(index - 1) % 5 是正确的,因为即使左侧为负数,% 也能保证结果介于 0 和 4 之间。(index + 4) % 5 是正确的,因为当左侧为负数时,% 将返回负数余数。请注意,此公式也适用于 Python。更多讨论请见this other Q&A。
【讨论】:
公式
newindex = (index + increment + arraylen) % arraylen
适用于增量 +1 和 -1(向前和向后移动)。
arraylen = 5 在您的示例中
【讨论】: