ホームページ > バックエンド開発 > C++ > C/C /Obj-C のモジュロ演算で負の数を処理する方法は?

C/C /Obj-C のモジュロ演算で負の数を処理する方法は?

DDD
リリース: 2024-11-02 23:10:29
オリジナル
836 人が閲覧しました

How to Handle Negative Numbers in Modulo Operations in C/C  /Obj-C?

C/C のモジュロ計算での負の数の処理 /Obj-C

C ベースの言語では、「%」を使用したモジュロ演算" 演算子は、負の数を扱うときに予期しない動作を示す可能性があります。具体的には、結果は数学的なモジュロ演算の結果とは異なる場合があります。

問題の説明

数学的概念として、モジュロ除算は 1 つの数値を次の値で割ったときの余りを返します。別の。ただし、C/C /Obj-C では、モジュロ演算子は、正の剰余を確保することよりも、被除数 (最初のオペランド) の符号を保持することを優先します。これにより、数学的な除算の結果が正の剰余になる場合でも、負の結果が生じる可能性があります。

たとえば、「(-1) % 8」という式を考えてみましょう。数学的には、8 は 1 回 -1 になり、余りが 7 になるため、これは 7 を返すはずです。ただし、 C/C では、被除数の符号が維持されるため、結果は -1 になります。

実装に関する考慮事項を含む解決策

この状況を修正するには、負の数を考慮してモジュロ演算子の改訂版を実装できます。

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

  int ret = a % b;
  if (ret < 0) {
    ret += b;
  }

  return ret;
}</code>
ログイン後にコピー

この最適化されたバージョンでは、オペランドの が負の場合、両方の符号を反転し、カスタム モジュロ演算子を再帰的に呼び出します。剰余を計算した後、それが負であるかどうかを確認し、除数を加算して正にします。これにより、最終結果が正しい数学的剰余を維持することが保証されます。たとえば、customMod(-1, 8) は 7 を返しますが、customMod(13, -8) は -3 を返します。

全体的に、この改訂されたモジュロ演算子は負の数値を効果的に処理し、数学的結果と一致する結果を生成します。モジュロ期待値。

以上がC/C /Obj-C のモジュロ演算で負の数を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート