如何解决“溢出减法”的公式
假设我要递增或递减一个索引,我将使用该索引在数组中移动。
数组从索引 0 开始,到索引 4 结束。如果我在索引 0 处并且想要移回 1 个索引,我应该在索引 4 处结束(环绕)。
这可能非常简单,但出于某种原因,我无法想出一个公式来给出这个结果。 “环绕加法”非常简单:索引 % 5 + 1,但我就是不知道减法。
解决方法
正确的加法公式是(index + 1) % 5
。当 index
为 4 时,您的版本给出了错误的结果。
正确的减法公式取决于 %
运算符在您使用的语言中的行为:
- 在 Python 中,
(index - 1) % 5
是正确的,因为即使左侧为负数,%
也能保证结果介于 0 和 4 之间。 - 在 C 和 Java 中,
(index + 4) % 5
是正确的,因为当左侧为负数时,%
将返回负余数。请注意,此公式也适用于 Python。
更多讨论见this other Q&A。
,公式
newindex = (index + increment + arraylen) % arraylen
适用于增量 +1
和 -1
(向前和向后移动)。
arraylen = 5
在您的示例中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。