演算子の優先順位
演算子が一つだけの場合は優先順位を気にする必要はありませんが、複数の演算子を組み合わせるような場合にはどの演算子を先に演算されるのかによって結果が異なることがあり、あらかじめ決められている演算子の優先順位に従って演算が行われる順位が決まります。ここでは C 言語における演算子の優先順位について解説します。
(Last modified: )
演算子の優先順位
C 言語での主な演算子の優先順位は次のようになっています。
| 演算子 | 結合順位 |
|---|---|
| % * / | 左 |
| + - | 左 |
| << >> | 左 |
| > >= < <= | 左 |
| == != | 左 |
| && | 左 |
| || | 左 |
| = | 右 |
他にも演算子はありますが主なものだけを抜粋しました。表の見方としては優先順位は上に行くほど高く下に行くほど低くなります。また同じ行に含まれる演算子は同じ優先順位です。
例えば演算子 * は演算子 + よりも優先順位が高くなっています。下記のサンプルを見てください。
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;
}
テキストエディタでプログラムを記述したあと sample.c という名前で保存します。(文字コードは UTF-8(BOM付き) です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで最初にコンパイルを行います。
cl sample.c
コンパイルが終わりましたら、次のように実行してください。
sample
複数の演算子が含まれる場合に、括弧を使って演算子の優先順位を変更するサンプルを作成しました。
-- --
C 言語における演算子の優先順位について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。