ホームページ  >  記事  >  バックエンド開発  >  C 系言語でモジュロ演算子 (%) が負の値に対して異なる動作をするのはなぜですか?

C 系言語でモジュロ演算子 (%) が負の値に対して異なる動作をするのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 18:09:30559ブラウズ

Why Does the Modulo Operator (%) Behave Differently with Negative Values in C-Like Languages?

C 系言語における負の値を使用したモジュロ演算子の動作を理解する

次のような C 派生言語のモジュロ演算子 (%) C、C 、および Obj-C は、負の数を扱うときに予期しない結果を引き起こす可能性があります。これは、特に数学的背景を持つ人にとってはイライラする可能性があります。この説明では、この問題を詳しく掘り下げ、モジュロ演算で負の値を処理するための解決策を検討します。

留意すべき重要な側面の 1 つは、モジュロ演算は整数除算後の剰余を反映するということです。ただし、負の数の場合、剰余の符号は C 標準に従って実装定義です。この不一致により、(-1) % 8 が予想される 7 ではなく -1 を返すなど、予期せぬ出力が発生する可能性があります。

この課題に対処するには、次のアプローチを活用できます。

<code class="c">int mod(int a, int b) {
   if (b < 0) 
     return -mod(-a, -b);
   int ret = a % b;
   if (ret < 0) 
     ret += b;
   return ret;
}</code>

このソリューションは、正のオペランドと負のオペランドの両方に対応します。剰余が負の場合は除数を加算することで、剰余が常に正になるようにします。結果として、mod(-1, 8) は 7 を返し、mod(13, -8) は -3 を返し、一貫性のある直感的な動作を提供します。

以上がC 系言語でモジュロ演算子 (%) が負の値に対して異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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