「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C 系言語でモジュロ演算子 (%) が負の値に対して異なる動作をするのはなぜですか?

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

2024 年 11 月 12 日に公開
ブラウズ:478

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 を返すなど、驚くべき出力が発生する可能性があります。

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

int mod(int a, int b) {
   if (b 

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3