演算子と予約語の一覧
演算子の一覧
C言語で使用される演算子の一覧、および優先順位です。
優先順位 | 演算子 | 形式 | 名称 | 結合性 |
---|---|---|---|---|
1 | () | x(y) | 関数呼出し演算子 | 左 |
[] | x[y] | 添字演算子 | 左 | |
. | x.y | ドット演算子 | 左 | |
-> | x->y | アロー演算子 | 左 | |
++ | x++ | 後置増分演算子 | 左 | |
-- | x-- | 後置減分演算子 | 左 | |
2 | ++ | ++x | 前置増分演算子 | 右 |
-- | --x | 前置減分演算子 | 右 | |
sizeof | sizeof x | sizeof演算子 | 右 | |
& | &x | 単項&演算子(アドレス演算子) | 右 | |
* | *x | 単項*演算子(間接演算子) | 右 | |
+ | +x | 単項+演算子 | 右 | |
- | -x | 単項-演算子 | 右 | |
~ | ~x | ~演算子(補数演算子) | 右 | |
! | !x | 論理否定演算子 | 右 | |
3 | () | (x)y | キャスト演算子 | 右 |
4 | * | x * y | 二項*演算子 | 左 |
/ | x / y | /演算子 | 左 | |
% | x % y | %演算子 | 左 | |
5 | + | x + y | 二項+演算子 | 左 |
- | x - y | 二項-演算子 | 左 | |
6 | << | x << y | <<演算子 | 左 |
>> | x >> y | >>演算子 | 左 | |
7 | < | x < y | <演算子 | 左 |
<= | x <= y | <=演算子 | 左 | |
> | x > y | >演算子 | 左 | |
>= | x >= y | >=演算子 | 左 | |
8 | == | x == y | ==演算子 | 左 |
!= | x != y | !=演算子 | 左 | |
9 | & | x & y | ビット単位のAND演算子 | 左 |
10 | ^ | x ^ y | ビット単位の排他OR演算子 | 左 |
11 | | | x | y | ビット単位のOR演算子 | 左 |
12 | && | x && y | 論理AND演算子 | 左 |
13 | || | x || y | 論理OR演算子 | 左 |
14 | ? : | x ? y : z | 条件演算子 | 右 |
15 | = | x = y | 単純代入演算子 | 左 |
+= -= *= /= %= <<= >>= &= ^= |= |
x += y x -= y x *= y x /= y x %= y x <<= y x >>= y x &= y x ^= y x |= y |
複合代入演算子 | 右 | |
16 | , | x , y | コンマ演算子 | 左 |
演算子の優先順位
一行の中に複数の演算子がある場合、優先順位が高い演算子ほど先に計算されます。
算数で、足し算よりも掛け算を優先して計算するのと同じことです。
演算子の数は非常に多いので、これを覚えるよりも丸括弧で優先順位を明示した方が良いでしょう。
例え演算子の優先順位が合っていようと間違っていようと、意図した通りの順番で演算が行われます。
//>>のほうが優先順位が高いか不安なら
5 >> 1 & 2;
//明示しておけば問題ない
(5 >> 1) & 2;
結合性
演算子の結合性は、同じ優先度の演算子が連続する場合の計算順です。
//左結合
5 - 4 - 3;
//↓
(5 - 4) - 3;
//右結合
x = y = z;
//↓
x = (y = z);
左結合は、左から順に演算が行われます。
引き算は左から順に計算が行われますが、もし右から計算が行われるとしたら計算結果が変わってしまいます。
右結合は、右から順に演算が行われます。
例のように代入演算子を連続して書けば、すべての変数には一番右の値が代入されます。
予約語
予約語とは、C言語の構文に使用されるキーワードのことです。
これらは変数名や関数名、引数名などに使用することはできません。
auto | break | case | char | const |
continue | default | do | double | else |
enum | extern | float | for | goto |
if | inline | int | long | register |
restrict | return | short | signed | sizeof |
static | struct | switch | typedef | union |
unsigned | void | volatile | while | _Alignas |
_Alignof | _Atomic | _Bool | _Complex | _Generic |
_Imaginary | _Noreturn | _Static_assert | _Thread_local |
もし原因不明のエラーが発生した場合は、予約語を変数名や関数名にしていないかを疑ってみましょう。
Visual Studioなどの開発環境の多くは、予約語を書くと文字の色が変わるので気づきやすくなっています。
(色が変わらない予約語もある)