ホームページ >バックエンド開発 >C++ >配列のインデックス付けで負の数値を正しく処理するにはどうすればよいでしょうか?

配列のインデックス付けで負の数値を正しく処理するにはどうすればよいでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-13 13:37:44864ブラウズ

How Can We Correctly Handle Negative Numbers in Array Indexing?

配列インデックス内の負の数値の処理

プログラミングでは、配列要素にアクセスするためにインデックスを使用する必要があることがよくあります。モジュロ演算子は正の数値を扱う場合にはうまく機能しますが、負の数値は処理方法の違いにより問題が発生する可能性があります。

剰余算術の理解

モジュロ演算子 (%) は、最初のオペランドを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。