C言語:演算子の優先順位を分かりやすく説明

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

C言語の演算子(えんざんし と読みます)には、優先順位というものが存在します。
優先順位を勘違いして代入式などを記述してしまうとプログラムが意図した処理にならない可能性があります。
ここでは、C言語演算子の優先順位を一覧にまとめてみました。

スポンサーリンク

優先順位の簡単な説明

優先順位を簡単に言うなら、算数で習ったような

足し算・引き算より掛け算・割り算の方が先に計算する

というようなことです。

例えば、

x = 10 + 3 * 2;

が実行されると変数xの値は、16になります。

もちろん上記の+や*以外にもC言語には沢山の演算子が存在します。
一覧を以下に示します。

C言語演算子の優先順位一覧

優先順位演算子意味名称結合規則
1()
.
,
->
括弧
配列
構造体のメンバ参照
構造体のポインタのメンバ参照
左から右
2!
&
++

sizeof
(cast)
否定
ポインタの参照
アドレス参照
インクリメント
デクリメント
変数等のサイズ(バイト)
キャスト
単項演算子右から左
3*
/
%
乗算
徐算
余り
乗除演算子左から右
4+
加算
減算
加減算演算子左から右
5<<
>>
ビット左シフト
ビット右シフト
シフト演算子左から右
6<
>
<=
>=
未満(より小さい)
超える(より大きい)
以下
以上
関係演算子左から右
7==
!=
一致
不一致
関係演算子(等価、不等価)左から右
8&ビット同士の論理積ビット演算子左から右
9ビット同士の排他的論理和ビット演算子(排他的論理和)左から右
10|ビット同士の論理和ビット演算子左から右
11&&条件の論理積論理演算子(AND)左から右
12||条件の論理和論理演算子(OR)左から右
13?:条件?真の処理:偽の処理三項演算子左から右
14=
*=
/=
%=
+=
-=
<<=
>>=
&=
|=
^=
代入
乗算して代入
除算して代入
余りを代入
加算して代入
減算して代入
左シフトして代入
右シフトして代入
論理積とって代入
論理和をとって代入
否定して代入
代入演算子右から左
15,式と式の区切りコンマ演算子左から右

結合規則について

一覧表に結合規則という項目があります。これは少し分かりにくい言葉なので説明します。

計算式や条件式は通常左から右に見ていきますよね。
C言語:演算子の優先順位を分かりやすく説明

この見た目と実際の計算順は少し違うということです。
代入式が一番分かりやすいので例にとります。

x = 10 + 2 * 5;

ここで優先順位が登場します。
上記式を優先順位が高い順に並べると

*+=

となります。
この中で*+に関しては結合規則が左から右です。
ですから通常は10+2*5と左から右に計算したいところですが、ここで優先順位がじゃまします。
+より*の方が優先順位が高い為、まず2*5を計算して10を求めてから10+10を計算して20を得ます。

ここまでまとめると

x = 20;

となります。

最後に、この中で一番優先順位が低い=ですが、結合規則が右から左となっています。
これは

x = 20;

の式を右から左に数値が移動すると考えると分かりやすいです。
つまり20という値が変数xに入るという意味です。

ですから変数xの値は20になるのです。
なんとなく分かったでしょうか?

コメント