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

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

DDD
DDDオリジナル
2024-12-15 20:57:14855ブラウズ

Why Does the Modulo Operator Sometimes Produce Negative Results?

モジュロ演算で負の結果が生じる理由

モジュロ演算子 (%) は、最初のオペランド (a) を 2 番目のオペランド (b) で除算した後の剰余を計算します。ただし、特定のモジュロ演算で負の値が発生する理由を理解するには、演算子の動作の詳細を掘り下げる必要があります。

ISO14882:2011(e) 5.6-4 規格には次のように記載されています。「整数オペランドの場合、/ 演算子は次のようになります。小数部を切り捨てた代数商。」これは、商 (a/b) が小数部のない整数であることを意味します。さらに、「商 a/b が結果の型で表現できる場合、(a/b)*b a%b は a に等しい」

という演算 (-7 % 3) を考えてみましょう。商 (-7 / 3) は、小数部分を破棄するため、-2 になります (-7.0 / 3.0 は -2.33 になりますが、整数部分のみを保持します)。商に除数 (-2 * 3 = -6) を掛け、その結果を余り (a%b) に加算すると、(-6) (-1) = -7 が得られ、元の値と一致します。

さて、(7 % -3) を調べてみましょう。商 (7 / -3) も -2 ですが、剰余 a%b の符号は ISO14882:2011(e) に​​従って実装定義されています。この場合、一部の実装では負の符号が選択され、結果は 1.

となるため、負のオペランドを使用したモジュロ演算の動作は実装に依存し、正または負の剰余が生成される場合があります。ただし、この規格では、特定の条件下では常に商と剰余から元の値を再構築できることが保証されています。

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

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