应对负模的挑战
处理负数时,模运算符 (%) 可能会很棘手。虽然它可以顺利地返回正整数的余数,但它对负数的行为通常会导致混乱。 该运算符提供除法后的余数。
负模问题
考虑一个长度为 3 的数组:
<code>i % 3 = 4 -> 1 3 -> 0 2 -> 2 1 -> 1 0 -> 0 -1 -> -1 -2 -> -2 -3 -> 0 -4 -> -1</code>
注意负余数如何保持负数,这与在正范围内循环的正余数不同。
负模的解决方案
为了确保负数按预期表现(环绕),需要一个自定义函数:
<code class="language-c++">int GetArrayIndex(int i, int arrayLength) { int r = i % arrayLength; return (r < 0) ? (r + arrayLength) : r; }</code>
如何运作
仅当 arrayLength
为负数时,此函数才巧妙地将 r
添加到余数 (r
)。这将负余数“包裹”到正范围内,模仿所需的模行为。
实际应用
让我们用三元素数组测试该函数:
GetArrayIndex( 4, 3) -> 1 GetArrayIndex( 3, 3) ->; 0 GetArrayIndex( 2, 3) ->; 2 GetArrayIndex( 1, 3) ->; 1 GetArrayIndex( 0, 3) ->; 0 GetArrayIndex(-1, 3) ->; 2 GetArrayIndex(-2, 3) ->; 1 GetArrayIndex(-3, 3) ->; 0 GetArrayIndex(-4, 3) ->; 2
这个自定义函数有效地处理负模运算,提供一致且可预测的结果。 现在您可以自信地使用负模而不会遇到意外行为。
以上是如何正确处理负模运算?的详细内容。更多信息请关注PHP中文网其他相关文章!