C言語 演算子の優先順位と結合規則:完全ガイド
演算子の優先順位
演算子の優先順位は、式の中に複数の演算子がある場合にどの演算子が最初に実行されるかを決定します。
例:
int x = 5 - 17 * 6;
C言語では * の優先順位が - と = より高いため、最初に 17 * 6 が評価されます。次に - の優先順位が = より高いため、減算が評価されます。
優先順位が高い順に演算子をまとめた表です。結合規則については後述します。
演算子の優先順位と結合規則表
| 演算子 | 意味 | 結合規則 |
|---|---|---|
()[]->. | 関数呼び出し 配列要素参照 間接メンバ選択 直接メンバ選択 | 左から右 |
!~+-++--&*sizeof(型) | 論理否定 ビット反転(1の補数) 単項プラス 単項マイナス インクリメント デクリメント アドレス演算子 間接参照(ポインタ参照) オブジェクトのサイズ取得 型キャスト(変換) | 右から左 |
*/% | 乗算 除算 剰余 | 左から右 |
+- | 二項加算 二項減算 | 左から右 |
<<>> | 左シフト 右シフト | 左から右 |
<<=>>= | 未満 以下 より大きい 以上 | 左から右 |
==!= | 等しい 等しくない | 左から右 |
& | ビット単位論理積 | 左から右 |
^ | ビット単位排他的論理和 | 左から右 |
| | ビット単位論理和 | 左から右 |
&& | 論理積 | 左から右 |
|| | 論理和 | 左から右 |
?: | 条件演算子 | 右から左 |
=*=/=%=+=-=&=^=|=<<=>>= | 単純代入 乗算代入 除算代入 剰余代入 加算代入 減算代入 ビット単位論理積代入 ビット単位排他的論理和代入 ビット単位論理和代入 左シフト代入 右シフト代入 | 右から左 |
, | 式の区切り | 左から右 |
演算子の結合規則
演算子の結合規則は、式がどの方向で評価されるかを決定します。例:
b = a;
ここでは a の値が b に代入され、逆ではありません。代入演算子 = の結合規則が右から左だからです。
また、同じ優先順位の演算子が2つ存在する場合、結合規則が実行方向を決定します。
例:
1 == 2 != 3
ここでは == と != の優先順位は同じ。結合規則は左から右なので、1 == 2 が最初に実行されます。
上記式は以下と等価:
(1 == 2) != 3
注意: 複数の演算子を含む文では、括弧 () を使用してコードをより読みやすくできます。
C言語
- C#の名前空間:命名競合を防ぐ仕組みと使い方
- C++変数とデータ型:int、double、char、string、boolを徹底解説
- C# usingステートメント完全ガイド:名前空間インポート、エイリアス、静的ディレクティブ
- C 言語の変数、データ型、定数 – 実践ガイド
- C#インターフェース完全解説:定義、実装例、実践的活用法
- C# 三項演算子:条件式を簡潔に書くためのガイド
- C言語の型キャストと変換をマスターする
- C 言語のループ完全ガイド: for、while、do-while を実例でマスター
- C言語 プリプロセッサとマクロ: #include, #define, 条件付きコンパイルをマスター
- C# デリゲート完全ガイド:関数参照とイベントの仕組みを理解する
- C#名前空間完全ガイド:構成、スコープ、ベストプラクティス