ホームページ >バックエンド開発 >C++ >C の剰余演算子 (%) が時々負の結果を返すのはなぜですか?

C の剰余演算子 (%) が時々負の結果を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-23 19:25:11342ブラウズ

Why Does the C   Modulo Operator (%) Sometimes Return Negative Results?

モジュラス評価: 負の結果を理解する

C では、モジュロ演算子 (%) が特定の条件下で負の値を生成することが知られています。これは、特にこれらの操作が異なる結果を返す場合に不可解になる可能性があります:

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

この動作を明確にするために、ISO C 標準 (ISO14882:2011) を参照します。モジュロ演算子は、最初のオペランド (分子) を 2 番目のオペランド (分母) で除算した余りを返します。

最初の演算では、(-7) を 3 で除算し、商は - になります。 2 の余りは -1 です。したがって、(-7 % 3) は -1 と等しくなります。

2 番目の演算では、7 を -3 で除算し、商も -2 になります。ただし、分母が負であるため、剰余の符号は実装で定義されます。この場合、実装は正の剰余、つまり 1 を返すことを選択します。

モジュロ演算子の動作は、特定のプラットフォームと実装によって異なる場合があることに注意することが重要です。一般に、モジュロ演算子を使用する場合は、負の値を慎重に扱い、異なる結果が生じる可能性を考慮することをお勧めします。

以上がC の剰余演算子 (%) が時々負の結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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