負のモジュロの課題を乗り越える
負の数を扱う場合、モジュロ演算子 (%) は扱いにくい場合があります。正の整数の場合は剰余をスムーズに返しますが、負の数での動作は混乱を招くことがよくあります。 この演算子は除算後の剰余を求めます。
負のモジュロの問題
長さが 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
) に巧妙に加算します。これにより、負の剰余が正の範囲に「ラップ」され、目的のモジュロ動作が模倣されます。
実際の応用
3 要素の配列を使用して関数をテストしてみましょう:
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 中国語 Web サイトの他の関連記事を参照してください。