【C++入門】演算子の優先順位と結合性を一覧表でわかりやすく解説
C++における演算子の優先順位と結合性とは
式の中でどの演算を先に行うかを決めるのが演算子の優先順位(precedence)です。一方、結合性(associativity)とは、同じ優先順位を持つ演算子が括弧なしで並んでいる場合に、左から評価されるか、右から評価されるかを決める性質のことを指します。この2つのルールによって、複雑な式の評価結果が決まります。
たとえば、掛け算(*)は足し算(+)よりも高い優先順位を持っています。そのため、両方が混在する式では、必ず掛け算が先に実行されます。
具体例:x = 7 + 3 * 2 の評価順序
次の式を見てみましょう。
x = 7 + 3 * 2;この場合、xに代入される値は 20 ではなく 13 になります。なぜなら、演算子「*」は「+」より優先順位が高いため、まず 3 * 2 = 6 が計算され、その後 7 + 6 = 13 となるからです。
もし足し算を先に行いたい場合は、括弧を使って次のように書きます。
x = (7 + 3) * 2; // 結果は 20C++ 演算子の優先順位一覧表
下の表では、優先順位の最も高い演算子が一番上、最も低い演算子が一番下に配置されています。式の中では、優先順位の高い演算子から順に評価されます。同じ行内の演算子は同順位であり、その場合は結合性の列に従って評価されます。
| 分類 | 演算子 | 結合性 |
|---|---|---|
| 後置(Postfix) | () [] -> . ++ -- | 左から右 |
| 単項(Unary) | + - ! ~ ++ -- (型) * & sizeof | 右から左 |
| 乗算 | * / % | 左から右 |
| 加算 | + - | 左から右 |
| シフト | << >> | 左から右 |
| 関係 | < <= > >= | 左から右 |
| 等価 | == != | 左から右 |
| ビットAND | & | 左から右 |
| ビットXOR | ^ | 左から右 |
| ビットOR | | | 左から右 |
| 論理AND | && | 左から右 |
| 論理OR | || | 左から右 |
| 条件(三項) | ?: | 右から左 |
| 代入 | = += -= *= /= %= >>= <<= &= ^= |= | 右から左 |
| カンマ | , | 左から右 |
まとめ:迷ったら括弧で明示する
優先順位と結合性をすべて記憶しておくのは難しいため、実際の開発では括弧 () を使って評価順序を明示することが推奨されます。特にビット演算と比較演算が混ざる式などは直感と異なる結果になりやすいため、括弧でグループ化することでコードの可読性と保守性が大きく向上します。
-
C++の演算子の優先順位と結合規則を徹底解説【一覧表付き】
演算子の優先順位とはC++における演算子の優先順位(operator precedence)は、式の中で各項(オペランド)がどのようにグループ化されるかを決める重要なルールです。また、結合規則(associativity)とは、括弧がない場合に同じ優先順位を持つ演算子がどちらの方向から評価されるかを決める特性のことを指します。これらは式の評価結果に直接影響を与えます。演算子によって優先順位には差があり、一部の演算子は他の演算子よりも先に評価されます。たとえば、乗算演算子(*)は加算演算子(+)よりも高い優先順位を持っています。具体例:x = 7 + 3 * 2 の評価x = 7 + 3 * 2
-
C#の左シフト演算子(<<)と右シフト演算子(>>)の使い方を解説
C#には、ビット単位でデータを操作するための「シフト演算子」が用意されています。代表的なものが左シフト演算子(<<)と右シフト演算子(>>)です。この記事では、それぞれの仕組みと具体的な使い方をサンプルコードとともに解説します。 左シフト演算子(<<)とは 左シフト演算子は、左側のオペランドの値を、右側のオペランドが指定したビット数だけ左に移動させる演算子です。 ビットが左にずれると、空いた下位ビットには0が埋められます。2進数では1桁左にずれるごとに値が2倍になるため、左シフトは「2のn乗倍」の計算としても利用できます。 右シフト演算子(>>)