PHP で 8%-3 が 0 に等しい理由を探る
PHP 言語で数学的演算を行うとき、ほとんどの人は奇妙な状況に遭遇するでしょう。そのうちの 1 つは、結果が 0 になる 8% (モジュロ 3) を計算することです。この結果は少し奇妙に思えます。理論的には 8 を 3 で割ることはできないため、余りが生じるはずです。
さらに詳しく説明する前に、まず PHP のモジュロ演算子「%」を見てみましょう。モジュロ演算は、2 つの数値間の剰余を計算するために使用されます。具体的な演算は、最初の数値を 2 番目の数値で除算し、その余りを結果として取得することです。
PHP におけるモジュロ演算ルールの重要な原則は、モジュロ結果の符号がモジュラスの符号と一致することです。したがって、モジュラスが正の場合、モジュロの結果も正になります。同様に、モジュラスが負の場合、モジュロの結果も負になります。
例に戻ると、8%-3 は 0 ではなく負の剰余を返す必要があります。しかし、なぜ PHP は 0 を返すのでしょうか?
この質問に対する答えには、実際にはコンピューター サイエンスの数学とプログラミングの概念が含まれています。
まず、PHP で整数がどのように表現されるかを理解する必要があります。 PHP では、整数は符号付き整数 (符号付き整数) と符号なし整数 (符号なし整数) の 2 種類に分類できます。符号付き整数は正負の符号で表現できる整数ですが、符号なし整数は負でない整数のみを表現できます。
デフォルトでは、PHP の整数は符号付き整数です。これは、8 と -3 が両方とも符号付き整数であることを意味します。 8%-3 を計算すると、PHP は 2 つの数値を同じ型に変換してから計算を実行します。
この場合、8 は符号付き整数に変換され、そのバイナリ表現は 00000000000000000000000000001000 となります。また、-3 も符号付き整数に変換され、そのバイナリ表現は 1111111111111111111111111111101 となります。
次に、PHP はこれら 2 つの数値に対してモジュロ演算を実行します。実際、PHP は次の式を使用して整数係数を計算します:
a % b = a - b * Floor(a / b)
この式に従って、8% を計算しましょう。 -3 の結果:
8 - (-3) フロア(8 / -3) = 8 - (-3) -2 = 8 - 6 = 2
この計算によると、得られる結果は 2 であり、整数モジュロ演算のデフォルトの結果 0 ではありません。どうしてこれなの?
その理由は、PHP の整数剰余演算子「%」が数学的定義に完全に準拠していないためです。従来の数学的定義によれば、モジュロ演算の結果は 0 とモジュラスの間にある必要があります。 PHP では、モジュラスが負の数の場合、モジュロ演算の結果は、負の剰余からモジュラスの絶対値を引いたものになります。
したがって、この例では、8 がモジュラスとして使用される場合、2 が正当なモジュロ結果になります。ただし、係数が負の場合に焦点を当てているため、最終結果は 0 になります。
要約すると、PHP の 8%-3 が 0 に等しい理由は、PHP のモジュロ演算子「%」の設計が従来の数学的定義に完全には準拠しておらず、次の記号に基づいているためです。結果を調整します。
この結果は少し奇妙に見えますが、実際のプログラミングでは、このルールに従って数学演算を操作および処理することで、予期しない結果を回避できます。
概要
この記事では、PHP で 8%-3 が 0 に等しい理由について説明します。 PHP における整数の符号付き表現と符号なし表現、および整数モジュロ演算の定義を分析することにより、PHP のモジュロ演算子「%」が従来の数学的定義に完全に準拠していないことがわかりました。実際のプログラミングでは、期待される結果を得るために、この規則を理解し、数学的演算を適切に処理する必要があることに注意してください。
以上がPHPで8%-3がゼロになる理由を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。