C言語編 演算子の優先順位

C言語に存在する演算子の優先度が、どのように定義されているか一覧できるようにしました。

演算子の優先順位

優先度の列の数値が小さいものほど先に処理されます。
評価の向きというのは、その演算子の左側と右側の式のうち、どちらから処理されるかという意味です。

優先度 演算子 機能 評価の向き 解説章
1 () 関数呼び出し 左から右 第9章
[] 配列の要素 第25章
-> ポインタからの構造体メンバアクセス 第31章
. 構造体メンバアクセス 第26章
++ 後置インクリメント 第15章
-- 後置デクリメント 第15章
(type) {...} 複合リテラル (C99)
2 ! 論理否定 右から左 第13章
~ ビット否定 第49章
++ 前置インクリメント 第15章
-- 前置デクリメント 第15章
+ 符号
- 符号
* ポインタの間接参照 第31章
& アドレス 第31章
sizeof 変数や型のサイズ取得 第6章
3 (型名) キャスト 右から左 第21章
4 * 乗算 左から右 第4章
/ 除算 第4章
% 剰余 第4章
5 + 加算 左から右 第4章
- 減算 第4章
6 << 左シフト 左から右 第49章
>> 右シフト 第49章
7 < 左の方が小さい 左から右 第11章
<= 左が右以下 第11章
> 左の方が大きい 第11章
>= 左が右以上 第11章
8 == 等しい 左から右 第11章
!= 等しくない 第11章
9 & ビット積 左から右 第49章
10 ^ ビット排他的論理和 左から右 第49章
11 | ビット和 左から右 第49章
12 && 論理積 左から右 第13章
13 || 論理和 左から右 第13章
14 ? : 条件演算子 右から左 第27章
15 = 代入 右から左 第3章
+= 加算代入 第27章
-= 減算代入 第27章
*= 乗算代入 第27章
/= 除算代入 第27章
%= 剰余代入 第27章
<<= 左シフト代入 第49章
>>= 右シフト代入 第49章
&= ビット積代入 第49章
|= ビット和代入 第49章
^= ビット排他的論理和代入 第49章
16 , カンマ 左から右 第27章

最も高い優先度のところにあるので勘違いしやすいですが、( ) は関数呼び出しのものであって、 a = (10 + 5) * 2; のように使われる ( ) とは異なります。これは括弧式というもので、演算子ではありません。
括弧式の効果は、グループ化する範囲を示すことです。

参考リンク

S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル 第5版
 -- 規格上の定義の確認に。

更新履歴

'2013/1/12 新規作成。



C言語編のトップページへ

Programming Place Plus のトップページへ