首页 >后端开发 >C++ >如何正确处理负模运算?

如何正确处理负模运算?

Susan Sarandon
Susan Sarandon原创
2025-01-13 13:22:43605浏览

How Do I Handle Negative Modulo Operations Correctly?

应对负模的挑战

处理负数时,模运算符 (%) 可能会很棘手。虽然它可以顺利地返回正整数的余数,但它对负数的行为通常会导致混乱。 该运算符提供除法后的余数。

负模问题

考虑一个长度为 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn