ホームページ > バックエンド開発 > C++ > 負のモジュロ演算を正しく処理するにはどうすればよいですか?

負のモジュロ演算を正しく処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-13 13:22:43
オリジナル
599 人が閲覧しました

How Do I Handle Negative Modulo Operations Correctly?

負のモジュロの課題を乗り越える

負の数を扱う場合、モジュロ演算子 (%) は扱いにくい場合があります。正の整数の場合は剰余をスムーズに返しますが、負の数での動作は混乱を招くことがよくあります。 この演算子は除算後の剰余を求めます。

負のモジュロの問題

長さが 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート