2012-02-03 10 views
1

現在、Cプログラミング(私の最初のプログラミング言語)を学んでいます。 オペレータの優先順位とちょっと混乱します。 算術演算子の優先順位は次のとおりです。C言語での演算子の優先順位

  1. *
  2. /
  3. %
  4. +
  5. -

これは、少なくとも私の本の中で与えられているものです。 私が混乱しているのは、私の理論試験になると、どのように表現を解決するのですか? 私は上記の順序で多くの表現を解決しようとしましたが、正解を得ることはできません。

int a = 10, b = 20, c; 

どのように我々はこの表現を解決するだろう:

は、以下の定義を考えると?

a + 4/6 * 6/2 

これは私の本の一例です。

+0

私は\演算子について聞いたことがありません。 PHPではなくCを学習していますか? –

+0

@KerrekSBくそー!それは '/'であるはずだった。申し訳ありませんが、混乱しました。朝から勉強しています。 – 912M0FR34K

+2

@ 912M0FR34K:それから休憩の時間です!プログラミングはすべて、賢明であり、細部に注意を払うことです。散歩をしてコーヒーを飲むと、後でもっと楽になります。 –

答えて

4
a + 4/6 * 6/2 
= 10 + 4/6 * 6/2 
= 10 + 0*6/2 
= 10 + 0/2 
= 10 

整数除算が使用されているよう4/60に評価されることに留意されたいです。

+1

ああ、それはOPが "表現を解決する"の意味です! :D +1 –

2

一つの安全な現実のソリューションは、常に括弧を使用することです()

+0

それは私がプログラムを作っている時です。しかし、私はちょうど私の試験紙にかっこを追加するだけでいいのですか? しかし、提案をありがとう。感謝。 – 912M0FR34K

+0

私は試験でそれらを追加するでしょう:) – andreadi

4

/*の優先順位は、それは数学であるのと同様に、Cで同じです。 abc、およびd場合、整数は、/オペレータであるため、

(a/b) * (c/d) 
(a/b*c)/d 

これらはCで等価ではありません。問題はCで、彼らはないかもしれないのに対し、数学で、次の式は、同等であることです整数除算を意味します(結果の整数部分のみを出力します)。

例えば、

(7/2)*(4/5); //yelds 0, because 4/5 == 0 
(7/2*4)/5; //yields 2 

一般的に良いコーディングプラクティスは、あなたの意図についての明示的なされています。特に、疑問がある場合はカッコで囲みます。そして時にはあなたがいなくても。

関連する問題