math - “溢出减法”的公式
问题描述
假设我正在增加或减少用于在数组中移动的索引。
数组从索引 0 开始,到索引 4 结束。如果我在索引 0 并且想要向后移动 1 个索引,我应该在索引 4 结束(环绕)。
这可能非常简单,但由于某种原因,我无法想出一个可以给我这个结果的公式。“环绕加法”非常简单:索引 % 5 + 1,但我就是想不出减法。
解决方案
加法的正确公式是(index + 1) % 5
。您的版本在 4 时给出了错误的结果index
。
正确的减法公式取决于%
您使用的语言中运算符的行为:
- 在 Python 中,
(index - 1) % 5
这是正确的,因为%
即使左侧为负数,也能保证结果介于 0 和 4 之间。 - 在 C 和 Java 中,
(index + 4) % 5
是正确的,因为%
当左侧为负数时会返回负数。请注意,此公式也适用于 Python。
有关更多讨论,请参阅其他问答。
推荐阅读
- javascript - 自动登录页面
- batch-file - 回声吐出奇怪的字符
- android - 浮动操作按钮未从 MainActivity.java 中删除 - 导致错误
- angular - 单击按钮后如何隐藏 ngForm 的验证器的错误消息
- c# - WPF 组合框设置视觉样式描边
- react-native - 如何在 react-native 中的 react-navigation 中制作下拉菜单?
- dart - Flutter 从 Future 返回一个 bool 类型
方法 - vue.js - 每次单击按钮时添加相同组件的正确方法是什么?
- javascript - 带有“this”变量的抽象
- c# - MVVM 如何在 Canvas 中绑定 MouseLeftButtonDown 和 MouseLeftButtonUp