トップC言語入門 > 条件演算および結合性

条件演算および結合性

1.条件演算(Conditional Expression)とは

C言語では x ? y : z という形の3項演算を条件式あるいは条件演算と呼ぶ。 言語によっては、あるいは、人によっては、 x && y や x == y などを条件演算と呼んでいることがあるが、 C言語では、通常、これは論理演算と呼び、x > y や x <= y は比較演算もしくは関係演算(Relational Expression)と呼んでいる。

例えば、再帰呼び出しを使って n の階乗を求める関数factは if 文では次のように表される。

int fact(int n) {
    if (n <= 1) return 1;
    else return n * fact(n-1);
}

条件演算子を使うと、次のようにシンプルに表される。

int fact(int n) {
    return n <= 1 ? 1 : n * fact(n-1);
}

2.結合性

次の例に示すように、条件演算子を複数含むケースがある。

    x = c1 ? a1 : c2 ? a2 : c3 ? a3 : a4;

これを if-else文で表すと

    if (c1) x = a1;
    else if (c2) x = a2;
    else if (c3) x = a3;
    else x = a4;
となる。これは、次のように、if-elseを繰り返したものである。
    if (c1) x = a1;
    else 
        if (c2) x = a2;
        else 
            if (c3) x = a3;
            else x = a4;

計算順序がはっきり分かるように、( ) で括ると、次のようになる。

    x = c1 ? a1 : (c2 ? a2 : (c3 ? a3 : a4));

右にある演算子ほど、先に計算されることから右結合(性)という。 これに対して、 y = x1 + x2 + x3 + x4; は y = ((x1 + x2) + x3) + x4; のように、左にある演算子が先に計算されるため、 加算演算子 + は左結合(性)である。