【问题标题】:Formula for "overflow subtraction"“溢出减法”的公式
【发布时间】:2021-02-04 03:29:21
【问题描述】:

假设我正在递增或递减一个索引,我将使用该索引在数组中移动。

数组从索引 0 开始,到索引 4 结束。如果我在索引 0 并且想要向后移动 1 个索引,我应该在索引 4 结束(环绕)。

这可能非常简单,但由于某种原因,我无法想出一个可以给出这个结果的公式。 “环绕加法”非常简单:索引 % 5 + 1,但我就是不知道减法。

【问题讨论】:

    标签: math computer-science


    【解决方案1】:

    正确的加法公式是(index + 1) % 5。当index 为 4 时,您的版本给出了错误的结果。

    正确的减法公式取决于您使用的语言中 % 运算符的行为:

    • 在 Python 中,(index - 1) % 5 是正确的,因为即使左侧为负数,% 也能保证结果介于 0 和 4 之间。
    • 在 C 和 Java 中,(index + 4) % 5 是正确的,因为当左侧为负数时,% 将返回负数余数。请注意,此公式也适用于 Python。

    更多讨论请见this other Q&A

    【讨论】:

      【解决方案2】:

      公式

      newindex = (index + increment + arraylen) % arraylen
      

      适用于增量 +1-1(向前和向后移动)。

      arraylen = 5 在您的示例中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2012-02-16
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 2023-01-16
        • 2013-03-29
        相关资源
        最近更新 更多