5

この混乱は、ほとんどの人がPDMAS または BODMAS ルールに従って算術式を評価するように訓練されているため発生しますが、C# などのプログラミング言語の算術式は同じようには機能しません。

それについてどう思いますか?

4

3 に答える 3

9

優先順位規則は、演算子の優先順位を指定します(たとえば、乗算は加算よりも優先順位が高い、PEMDASなどの演算子が最初に評価されます)。

結合規則は、同じ優先順位の演算子がどのようにグループ化されるかを示します。算術演算子は左結合ですが、割り当ては右結合です(たとえば、a = b=cはb=c、a = bとして評価されます)。

順序は、優先順位結合性のルールを適用した結果であり、式がどのように評価されるかを示します。つまり、どの演算子が最初に評価され、どの演算子が後で評価されるかを示します。実際の順序は、中かっこを使用して変更できます(中かっこも最も優先度の高い演算子です)。

プログラミング言語での演算子の優先順位結合性は、その言語マニュアルまたは仕様に記載されています。

于 2008-09-16T10:01:02.353 に答える
2

優先順位と結合性はどちらも、用語をサブ用語に分割する方法と順序を指定します。言い換えれば、明示的に指定されていない場合、括弧が暗黙的に設定されるルールを指定します。

括弧のない用語がある場合は、優先順位の最も低い演算子から始めて、括弧で囲みます。

例えば:

優先順位:

  1. .
  2. !
  3. *、/
  4. +,-
  5. ==
  6. &&

用語:

!person.isMarried && person.age == 25 + 2 * 5

次のようにグループ化されます。

  1. !(person.isMarried) && (person.age) == 25 + 2 * 5
  2. (!(person.isMarried)) && (person.age) == 25 + 2 * 5
  3. (!(person.isMarried)) && (person.age) == 25 + (2 * 5)
  4. (!(person.isMarried)) && (person.age) == (25 + (2 * 5))
  5. (!(person.isMarried)) && ((person.age) == (25 + (2 * 5)))
  6. ((!(person.isMarried)) && ((person.age) == (25 + (2 * 5))))

非常に一般的な規則の 1 つは、 + と - の前に * と / を優先することです。

結合性は、同じ優先順位の演算子をグループ化する方向を指定します。ほとんどの演算子は左から右です。単項前置演算子は右から左です。

例:

1 + 2 + 3 + 4

次のようにグループ化されます。

  1. (1 + 2) + 3 + 4
  2. ((1 + 2) + 3) + 4
  3. (((1 + 2) + 3) + 4)

その間

!!+1

としてグループ化されます

  1. !!(+1)
  2. !(!(+1))
  3. (!(!(+1)))

これまでのところ、すべてが BODMAS/PEDMAS 規則に準拠していますが、どのような違いがありましたか?

于 2008-09-16T09:57:03.767 に答える
2

本当に違いがあるかどうかはわかりません。従来の BODMAS (括弧、順序、除算、乗算、加算、減算) または PDMAS (括弧、指数、除算、乗算、加算、減算) は、すべての可能な演算のサブセットにすぎず、そのような演算を適用する順序を示します。 . BODMAS/PEDMAS 規則に違反している言語は知りませんが、通常、各言語では、++、--、= などのさまざまな演算子が追加されます。

混乱した場合に備えて、常に演算子の優先順位のリストを手元に置いておきます。ただし、疑問がある場合は、通常、意味を明確にするためにいくつかの括弧を使用する価値があります. 括弧の優先順位が最も高くないことに注意してください。C++ の例については、 http://msdn.microsoft.com/en-us/library/126fe14k.aspxを参照してください。

于 2008-09-16T09:55:35.253 に答える