ホームページ >バックエンド開発 >C++ >モジュロ演算子が負の数で負の結果を生成するのはなぜですか?

モジュロ演算子が負の数で負の結果を生成するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 09:55:25205ブラウズ

Why Does the Modulo Operator Produce Negative Results with Negative Numbers?

モジュロ演算子の結果が負の値になる: 数学的説明

モジュロ演算子 % を負の数値に適用すると、条件に応じて異なる結果が生成される可能性があります。実装について。これは不可解かもしれませんが、モジュロ演算子の数学的定義を理解すると、この動作を解明できます。

ISO14882:2011(e) 5.6-4 によると、モジュロ演算子は、除算の余りを返します。最初の表現を 2 番目の表現で表現します。 2 番目のオペランドがゼロの場合、動作は未定義です。整数オペランドの場合、商は、小数部分が切り捨てられた代数商です。

これを説明するために、次の例を考えてみましょう。

std::cout << (-7 % 3) << std::endl; // -1
std::cout << (7 % -3) << std::endl; // 1

(-7 % 3) = -1

  • -7 割った 3 -2 の代数商が得られます。
  • -2 に 3 を掛けると、-6 が得られます。
  • -7 を 3 で割った余りは、-1 になります。

(7 % -3) = 1

  • 7 を -3 で割ると、代数商は -2 になります。
  • -2 に -3 を掛けると 6 になります。
  • の余りしたがって、7 を -3 で割った値は 1 になります。

どちらの場合も、代数商は同じ (-2) です。両方のオペランドの符号が異なる場合、剰余の違いは実装で定義された剰余の符号から生じます。

以上がモジュロ演算子が負の数で負の結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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