如何使用%运算符反转此公式
本文关键字:何使用 运算符 | 更新日期: 2023-09-27 17:56:20
我有一个有 5 个状态的信号量变量。
我可以使用这个 cicle 增加状态
X = (X + 1) % 5
对于 X = {0, 1, 2, 3, 4},生成 {1, 2, 3, 4, 0}。
但是,如果我尝试朝另一个方向减少状态,就不会带来正确的结果。
X = (X - 1) % 5
对于 X = {0, 1, 2, 3, 4},生成 {-1, 0, 1, 2,3} 而不是 {4, 0, 1, 2, 3}
例如,在 excel 中,如果您尝试=MOD(-1;5)
则得到 4。
而不是
X = (X - 1) % 5
用
X = (X + 4) % 5
这是
X = (X - 1 + 5) % 5
或一般
X = (X - 1 + n) % n
这确保了()
中的参数始终是正数 - 因此除法余数也保持正数。
该问题是由 C# 支持余数运算符而不是模运算符引起的。
如果您的x
始终在0
和n-1
之间,那么其他更简单的解决方案就足够了。如果您想要一种适用于任何x
的方法,那么更复杂的方法是必要的。
static int modulus(int x, int n)
{
return ((x % n) + n) % n;
}
第一个余数运算将值转换为-n+1 ... n-1
范围。一旦我们加n
我们就会得到总是正值。然后,最终的余数运算提供预期的结果。