C言語の演算子一覧がこちらのページにあります。
優先度 | 演算子 | 機能 | 結合の向き | オーバーロード | 解説ページ |
---|---|---|---|---|---|
1 | :: | スコープ解決 | 左から右 | できない |
「列挙型」 「整数型」 「構造体とポインタ」 「スコープと名前空間」 「クラス」 「静的メンバ」 |
2 | () | 関数呼び出し | 左から右 | できる |
「関数を作る」 「関数ポインタとラムダ式」 「クラス」 |
[] | 配列の要素 | できる |
「文字列の入力」 「std::vector」 「配列」 「多次元配列」 |
||
-> | ポインタからのメンバアクセス | できる |
「構造体とポインタ」 「クラス」 |
||
. | メンバアクセス | できない |
「構造体」 「クラス」 |
||
++ | 後置インクリメント | できる | 「for文」「配列とポインタ」 | ||
– | 後置デクリメント | できる | 「for文」「配列とポインタ」 | ||
type()、type{} | 関数形式による明示的型変換 | できない | 「コンストラクタ」 | ||
static_cast | キャスト | できない | 「浮動小数点数」「符号無し整数」 | ||
dynamic_cast | キャスト | できない | |||
const_cast | キャスト | できない | 「オーバーロード」 | ||
reinterpret_cast | キャスト | できない | 「配列とポインタ」「バイナリ形式での読み書き」 | ||
typeid | 型情報の取得 | できない | |||
3 | ! | 論理否定 | 右から左 | できる | 「要素を探索する」 |
~ | ビット単位NOT(ビット反転) | できる | 「ビット単位の処理」 | ||
++ | 前置インクリメント | できる | 「for文」「配列とポインタ」 | ||
– | 前置デクリメント | できる | 「for文」「配列とポインタ」 | ||
+ | 符号 | できる | 「計算」 | ||
- | 符号を反転させる | できる | 「計算」 | ||
* | ポインタの間接参照 | できる |
「配列とポインタ」 「関数ポインタとラムダ式」 |
||
& | メモリアドレス | できる ※注意が必要 |
「メモリとオブジェクト」 「構造体とポインタ」 「関数ポインタとラムダ式」 「クラス」 |
||
sizeof | 変数や型の大きさを取得 | できない | 「整数型」 | ||
(type) | キャスト(C言語スタイル) | できない | 「アサート」「配列とポインタ」 | ||
new、new[] | 動的メモリ割り当て | できる | |||
delete、delete[] | 動的に割り当てたメモリの解放 | できる | |||
alignof | アラインメント値を取得 | できない | 「メモリとオブジェクト」 | ||
4 | .* | メンバを指すポインタをクラス型のオブジェクトに結び付けて、メンバを参照する | 左から右 | できない |
「構造体とポインタ」 「クラス」 |
->* | メンバポインタをクラス型のポインタに結び付けて、メンバを参照する | できる |
「構造体とポインタ」 「クラス」 |
||
5 | * | 乗算 | できる | 「乗算と除算」 | |
/ | 除算 | できる | 「乗算と除算」 | ||
% | 剰余 | できる | 「乗算と除算」 | ||
6 | + | 加算 | 左から右 | できる | 「計算」「配列とポインタ」 |
- | 減算 | できる | 「計算」「配列とポインタ」 | ||
7 | << | 左シフト | 左から右 | できる | 「ビット単位の処理」 |
>> | 右シフト | できる | 「ビット単位の処理」 | ||
8 | < | 左の方が小さい | 左から右 | できる | 「論理値」 |
<= | 左が右以下 | できる | 「論理値」 | ||
> | 左の方が大きい | できる | 「論理値」 | ||
>= | 左が右以上 | できる | 「論理値」 | ||
9 | == | 等しい | 左から右 | できる | 「論理値」 |
!= | 等しくない | できる | 「論理値」 | ||
10 | & | ビット単位AND(ビット単位論理積) | 左から右 | できる | 「ビット単位の処理」 |
11 | ^ | ビット単位XOR(ビット単位排他的論理和) | 左から右 | できる | 「ビット単位の処理」 |
12 | | | ビット単位OR(ビット単位論理和) | 左から右 | できる |
「ビット単位の処理」 「バイナリ形式での読み書き」 |
13 | && | 論理積 | 左から右 | できる ※注意が必要 | 「要素を探索する」 |
14 | || | 論理和 | 左から右 | できる ※注意が必要 | 「要素を探索する」 |
15 | ? : | 条件演算子 | 右から左 | できない | 「if文と条件演算子」 |
= | 代入 | できる | 「代入」 | ||
+= | 加算代入 | できる |
「代入」 「配列とポインタ」 |
||
-= | 減算代入 | できる |
「代入」 「配列とポインタ」 |
||
*= | 乗算代入 | できる | 「代入」 | ||
/= | 除算代入 | できる | 「代入」 | ||
%= | 剰余代入 | できる | 「代入」 | ||
<<= | 左シフト代入 | できる | 「ビット単位の処理」 | ||
>>= | 右シフト代入 | できる | 「ビット単位の処理」 | ||
&= | ビット単位AND の複合代入 | できる | 「ビット単位の処理」 | ||
|= | ビット単位OR の複合代入 | できる | 「ビット単位の処理」 | ||
^= | ビット単位XOR の複合代入 | できる | 「ビット単位の処理」 | ||
throw | 例外の送出 | できない | |||
17 | , | コンマ | 左から右 | できる ※注意が必要 | 「if文と条件演算子」 |
「優先度」の列の数値が小さいものほど、演算が優先されます。演算とは、演算子ごとに異なる処理のことを指しており、/
なら除算、<<
ならシフト演算といった意味です。オペランドの式から値を得ることは評価といい、(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;
のように使われる ()
とは異なります。これは括弧式というもので、演算子ではありません。括弧式の効果は、グループ化する範囲を示すことです。
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |