應對負模的挑戰
處理負數時,模運算子 (%) 可能會很棘手。雖然它可以順利地傳回正整數的餘數,但它對負數的行為通常會導致混亂。 此運算符提供除法後的餘數。
負模問題
考慮一個長度為 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中文網其他相關文章!