2012-01-20 2 views
5

私は今日、.NETフレームワークが計算を実行するときにBODMASの操作順序に従うことを発見しました。これは、計算は次の順序で行われている。.NETにおけるBODMASの原則

  • ブラケット
  • 受注
  • 乗算
  • 追加
  • 減算

私の周りに検索したが.NETを確認する文書は見つかりません。間違いなくがこの原則に従っていますが、そのような文書はどこにありますか?私が正しい方向に向けることができれば幸いです。

+3

です。 .NETはフレームワークです。 – Groo

+1

C#の場合http://msdn.microsoft.com/en-us/library/6a71f45d(v=vs.80).aspx –

+0

ドキュメントによると、C#はBODMASに従わないので、証明するコードを表示できますします。 –

答えて

23

C#は学校で学んだ方法でBODMASルールを実行しません。あなたが持っていると仮定します。

A().x = B() + C() * D(); 

あなたは単純に加え、その後、乗算が「最初に行われる」と思い、および割り当て最後、したがって、これは相当である可能性があります

c = C(); 
d = D(); 
product = c * d; 
b = B(); 
sum = b + product; 
a = A(); 
a.x = sum; 

しかし、何が起こるかではありません。 BODMASルールでは、オペレーションを正しい順序で実行する必要があります。 オペランドは、任意の順序で計算できます。

C#では、オペランドはの左から右へと計算されます。したがって、この場合には、何が起こるだろうことは、論理的に同じである。また、

a = A(); 
b = B(); 
c = C(); 
d = D(); 
product = c * d; 
sum = b + product; 
a.x = sum; 

、C#がごとほかのすべての乗算を行いません。たとえば:

A().x = B() + C() + D() * E(); 

が以下のように計算される。

a = A(); 
b = B(); 
c = C(); 
sum1 = b + c; 
d = D(); 
e = E(); 
product = d * e; 
sum2 = sum1 + product; 
a.x = sum2; 

を参照してください、一番左の加算は乗算の前に起こります。乗算はの右端のの前に行われなければなりません。

基本的には、ルールは「式を正しく括弧で括って、2項演算子しか持たないようにしてから、右側の前にある2項演算子のすべての左側を評価します。したがって、例は:

A().x = ((B() + C()) + (D() * E())); 

となります。左端加算は右端加算のためのオペランドであるため、左オペランドは常に右オペランドの前に実行されるため、左端加算は乗算の前に実行しなければなりません。このテーマはあなたが興味のある場合は

、それに私の記事を参照してください。これは、依存言語は

http://blogs.msdn.com/b/ericlippert/archive/tags/precedence/

+0

優れた答え –