先頭へ戻る

演算子の優先順位 | Programming Place Plus C言語編

Programming Place Plus トップページC言語編

先頭へ戻る

演算子の優先順位

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

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

左から右

第49章
12 && 論理積 左から右 第15章
13 || 論理和 左から右 第15章
14 ? : 条件演算子 右から左 第27章
15 = 代入 右から左 第7章
+= 加算代入 第7章
-= 減算代入 第7章
*= 乗算代入 第7章
/= 除算代入 第7章
%= 剰余代入 第7章
<<= 左シフト代入 第49章
>>= 右シフト代入 第49章
&= ビット積代入 第49章
|= ビット和代入 第49章
^= ビット排他的論理和代入 第49章
16 , カンマ 左から右 第27章

「優先度」の列の数値が小さいものほど、演算が優先されます。演算とは、演算子ごとに異なる処理のことを指しており、/ なら除算、<< ならシフト演算といった意味です。オペランドの式から値を得ることは評価といい、(a + b) / f() であれば、a + b を計算して値を作ったり、f を呼び出して戻り値を得たりすることを指します。演算子の優先度が高いからといって、その演算子のオペランドが先に評価されるということではありません。評価の順序は、&& や ||(短絡評価)、カンマ演算子(必ず左から)、?:(第1オペランドを評価してから、第2または第3オペランドが評価される)といった一部の例外を除いて、未規定です1

「結合の向き」とは、優先度が同じ演算子が1つの式の中に複数あらわれるとき、どの演算子とどのオペランドが結びついているのかを決めるルールです。たとえば、a * b / c では、*/ は同じ優先度で、左から右の結合なので、(a * b) / c であるとみなされます。同様に、a = b = c では、= は右から左の結合なので、a = (b = c) であるとみなされます。


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

参考リンク


更新履歴

’2018/6/1 _Alignof演算子を追加。

’2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

’2013/1/12 新規作成。



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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー