C/C で負の数を処理するモジュロ演算子 /Obj-C
C、C、および Obj-C のモジュロ演算子(%) は除算演算の余りを返します。ただし、負の数が含まれる場合、予期しない結果が生じる可能性があります。具体的には、(-1) % 8 は 7 ではなく -1 と評価されます。この動作は、モジュロ演算子の一貫した解釈を期待するプログラマーにとってイライラする可能性があります。
問題の理解
モジュロ演算子は次のように定義されます: x % y = x - (x / y) * y。両方のオペランドが非負の場合、剰余は非負になります。ただし、一方または両方のオペランドが負の場合、動作は実装定義です。これは、コンパイラやランタイム環境が異なれば、結果も異なる可能性があることを意味します。
負の数を処理するためのソリューション
負の数を処理するときに一貫した動作を保証するには、次のコードを使用できます。 function:
<code class="c++">int mod(int a, int b) { if (b < 0) { // Check if the divisor is negative return -mod(-a, -b); // Recursively call mod with both operands negated } int ret = a % b; if (ret < 0) { ret += b; // Adjust the remainder if it's negative } return ret; }</code>
この関数は、負の被除数と除数を正しく処理します。たとえば、mod(-1, 8) は 7 を返し、mod(13, -8) は -3 を返します。
追加の考慮事項
mod()この関数は負の数を正しく処理しますが、すべてのコンパイラやランタイム環境でサポートされているわけではないことに注意してください。移植性が懸念される場合は、負のオペランドを明示的にチェックし、それに応じて計算を調整する必要がある場合があります。
mod() 関数を使用するか、負のオペランドを手動で処理することにより、モジュロ演算子が一貫して動作することを保証できます。オペランドの値に関係なく、C、C、または Obj-C コード。
以上がモジュロ演算子は C/C /Obj-C で負の数をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。