配列インデックス内の負の数値の処理
プログラミングでは、配列要素にアクセスするためにインデックスを使用する必要があることがよくあります。モジュロ演算子は正の数値を扱う場合にはうまく機能しますが、負の数値は処理方法の違いにより問題が発生する可能性があります。
モジュロ演算子 (%) は、最初のオペランドを 2 番目のオペランドで割った余りを求めるために使用されます。例:
<code>4 % 3 == 1 3 % 3 == 0 2 % 3 == 2 1 % 3 == 1</code>
ただし、負の数を扱うときのモジュロ演算子の動作は異なります。
<code>-1 % 3 == -1 -2 % 3 == -2 -3 % 3 == 0 -4 % 3 == -1</code>
予期された動作からのこの逸脱は、非負の剰余を生成するように設計されたモジュロ演算子の基礎となる実装に起因します。
この不一致を解決し、配列の正しいインデックス付けを保証するには、カスタムのモジュロ関数が必要です。これを実現する 1 つの方法は次のとおりです:
<code class="language-c++">int mod(int x, int m) { return (x%m + m)%m; }</code>
この関数は、まず剰余を計算し、剰余が負の場合は配列の長さを加算します。これにより、負の値であっても、配列内の目的のインデックスが返されることが保証されます。
モジュラー演算の数を最適化する別の方法は次のとおりです:
<code class="language-c++">int mod(int x, int m) { int r = x%m; return r < 0 ? r + m : r; }</code>
このバージョンでは、追加のモジュロ演算の代わりに条件ステートメントを使用して、同じ結果を実現します。
これらのカスタム モジュロ関数を使用すると、配列インデックス内の負の数値を効率的に処理でき、望ましい結果を確実に得ることができます。
次のコード スニペットは、カスタム モジュロ関数を使用して、負の数値を含む配列に正しくインデックスを付ける方法を示しています。
<code class="language-c++">int GetArrayIndex(int i, int arrayLength) { return mod(i, arrayLength); } 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</code>
この理解の向上とカスタム モジュロ関数により、負の数が正確な配列インデックス付けを脅かすことはなくなります。
以上が配列のインデックス付けで負の数値を正しく処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。