2017-02-15 20 views
1

CはBODMAS ruleに従っていますか?私は乗算と除算を混同しています。Cの乗算と除算

乗算は除算よりも優先順位が高くなっていますか?

+0

[はい、次にいくつか](http://en.cppreference.com/w/c/language/operator_precedence) – StoryTeller

+6

'*'、 '/'、 '%'は等しい優先順位です。左から右へ評価する – chux

+0

BODMASルールはどうですか? –

答えて

5

乗算、除算、および剰余は同じ優先順位を持ち、左から右に関連付けられます。例えば

x * y/z(x * y)/z
x/y * z同じである(x/y) * zと同じです。

これはBODMASルールと一致するかどうかはいくつかの論争の問題だと思われますが、それはCのセマンティクスではなく、BODMASの意味についての質問です。リンクされたWikipedia articleは、 "乗算と除算が等しい優先順位です"これはCと矛盾していません(ただし、Cの剰余演算子%は言及されていません)。

C standard(リンクはC11のN1570ドラフトへのリンクです)は、「演算子の優先順位」を直接定義しません。代わりに、式の階層構文を定義します。例えば、(セクション6.5.5で定義された)乗法発現の構文は次のとおりです。

乗法発現
          キャスト発現
          乗法式*キャスト式
          乗法表現/キャスト式
          乗法表現%キャスト式

キャスト発現(6.5.4)は、またはキャスト演算子を含んでも含まなくてもよいです。 の倍数表現に表示される任意の式です。

+1

注:負のオペランドに関するさまざまな数学の定義を持つ_modulus_は、Cで定義されていないので、 '%'は_remainder_演算子と呼ばれます。BODMASについての有益な答えです。 – chux

+1

@chux:かなり正しい、修正済み。 –