演算子の優先順位

演算子の優先順位のまとめ。

優先順位 演算子
高い ( ) [ ] -> .
! ~ + – ++ — (型キャスト) * & sizeof
* / %
+ –
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += -+ *= /* など
低い ,

なんか2度出てくる演算子があるけど?

[追記]

2度出てくる演算子についてコメントをもらった。片方(たぶん優先順位の高いほう)は単項演算しだそう。なるほどね。
コメントありがとうございます。

カンマ演算子

カンマ(,)って演算子だったんだ!
カンマ演算子は、式を続けて書くときに使う。よく使うのは for ループ。

for (i = 0, j = 0; (i + j) < count; i++, j;;)
    ...

ループ変数に i と j を使って、それぞれ初期化、インクリメントをしている。

カンマで区切られた式のリストの値は、最も右の式の値になる。次の文では、value には 100 が代入される。

value = (count, 99, 33, 100);

式のリストにカッコをつけているのは、代入演算子よりもカンマ演算子のほうが優先順位が低いから。

代入演算子の応用

多重代入

変数1 = 変数2 = 変数3 = ... = 変数N = 値;
#include

int main(void)
{
    int i, j, k;

    i = j = k = 99;

    printf("%d %d %d\n", i, j, k);

    return 0;
}
takatoh@nightschool $ ./sample_11_8a
99 99 99

演算子の省略記法

例えば

x = x + 3;

という代入があったとき、これを省略記法で

x += 3;

と書ける。省略記法で書ける演算子は次のとおり。

+ - * / % << >> & | ^
#include

int main(void)
{
    int i;

    for (i = 0; i < 20; i += 2) {
        printf("%d\n", i);
    }

    return 0;
}
takatoh@nightschool $ ./sample_11_8b
0
2
4
6
8
10
12
14
16
18