演算子の優先順位
演算子が一つだけの場合は優先順位を気にする必要はありませんが複数の演算子を組み合わせる場合には演算子の優先順位を把握しておく必要があります。
主な演算子の優先順位は次のようになっています。
演算子 | 結合順位 |
---|---|
% * / | 左 |
+ - | 左 |
<< >> | 左 |
> >= < <= | 左 |
== != | 左 |
&& | 左 |
|| | 左 |
= | 右 |
他にも演算子はありますが主なものだけを抜粋しました。表の見方としては優先順位は上に行くほど高く下に行くほど低くなります。また同じ行に含まれる演算子は同じ優先順位です。
例えば演算子「*」は演算子「+」よりも優先順位が高くなっています。下記のサンプルを見てください。
int a = 10 + 5 * 3;
「*」は「+」よりも優先順位が高いのでまず「5 * 3」が行われます。
int a = 10 + 15;
次に「10 + 15」が行われます。その結果である「25」が変数「a」に格納されます。なお代入演算子である「=」は優先順位が「*」や「+」よりも低くなっていますので、代入は最後に行われます。
なお、同じ優先順位である「*」と「/」が同時に使われていた場合は結合順位に従って処理が行われます。「*」や「/」の結合順位は左ですので左から順に演算が行われます。下記のサンプルを見てください。
int a = 10 * 3 / 5;
「*」と「/」は優先順位が同じですので結合順位に従い左から順に処理が行われます。よって「10 * 3」がまず実行されます。
int a = 30 / 5;
次に「30 / 5」が行われます。その結果である「6」が変数「a」に格納されます。
カッコを使って優先順位を変更
演算子は優先順位に従って処理が行われますが、カッコを使うことで演算子に対して決められている優先順位に関係無く最優先で演算が行われます。次のサンプルを見てください。
int a = 10 + 5 * 3;
上記では先に「5 * 3」が行われます。ここで「10 + 5」を先に行いたい場合にはカッコを使って次のように記述します。
int a = (10 + 5) * 3;
上記ではカッコで囲まれた演算が一番最優先となりますのでまずは「10 + 5」が行われます。
int a = 15 * 3;
そして「15 * 3」が行われます。その結果である「45」が変数「a」に格納されます。
カッコを使うことで演算子の優先順位が低い処理であっても先に処理させることが出来ます。
サンプルプログラム
では簡単なサンプルプログラムを作成して試してみます。
#include <stdio.h> int main(void){ int a; a = 7 + 5 * 4; printf("7 + 5 * 4 = %d¥n", a); a = (7 + 5) * 4; printf("(7 + 5) * 4 = %d¥n", a); return 0; }
上記を「test9-1.c」の名前で保存します。まずコンパイルを行います。
コンパイルが終わりましたら「test9-1」と入力して実行します。
( Written by Tatsuo Ikura )