剰余演算と負のインデックス
負の整数に対する標準のモジュロ演算 (%) を配列のインデックス付けに使用すると、予期しない結果が生じる可能性があります。 残りは負の値になる可能性があり、無効なインデックス値になります。 正しい正の配列インデックスを保証するには、修正されたモジュロ関数が必要です。
一般的な解決策は、次の式を使用することです:
<code>GetArrayIndex(i, arrayLength) = (i % arrayLength + arrayLength) % arrayLength</code>
これにより、入力 i
の符号に関係なく、範囲 [0, arrayLength - 1] 内の正のインデックスが保証されます。
カスタムモジュロ関数
コードをよりクリーンにするには、カスタム mod
関数が役立ちます:
<code class="language-java">public static int mod(int x, int m) { return (x % m + m) % m; }</code>
この関数は、m
を追加することで負の剰余を処理し、正の結果を保証します。
最適化モジュロ関数
効率を向上させる (モジュロ演算を減らす) には、次の代替案を検討してください。
<code class="language-java">public static int mod(int x, int m) { int r = x % m; return r < 0 ? r + m : r; }</code>
このバージョンでは、剰余 r
が負かどうかを直接チェックし、必要な場合にのみ m
を追加します。
例
いずれかのカスタム mod
関数を使用すると、期待される配列インデックスの動作が得られます。
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 サイトの他の関連記事を参照してください。