【发布时间】:2012-10-17 12:17:16
【问题描述】:
我几乎不好意思问这个问题,因为它可能非常明显 - 但我看不出有什么办法摆脱这个问题,我怀疑有办法。
我有一个变量,我需要从中添加/减去值 - 但我想将它保持在一个值范围内,在任一端循环 - 例如
范围是 0-3,所以值是 0,1,2,3,0,1,2,3 - 就是这样
x = (x + val) MOD 4
然而,当 val 为负时,我们应该看到 0,3,2,1,0,3,2,1 并且解决方案远没有那么优雅
x = (x + val) MOD 4
if (x < 0) x = 4 + x;
这行得通,但它很笨重,我不禁想到可能有一个“单线”解决方案 - 但如果我能想到它,我该死的? :)
准备好尴尬
【问题讨论】:
-
为什么一定要一行长?
-
正确的模数运算符已经这样做了。如果您使用余数运算符(在编程语言中通常为
%)实现此操作,则行为会随着负数而变化,您需要发布的两条线。换句话说:您可能使用了余数运算符而不是正确的模运算符。 -
@raedwald 如果它是优雅的并且看起来和感觉像一个酒窝,它可能是 50 行 :)
-
@TaZ aha - 现在我意识到这不是一个不常见的问题,并且语言如何处理 Modulus 变化很大(并且建议似乎是这两种方法都不“正确” - 你只需要工作周围...)!?
标签: math