【C言語】
簡潔な式を書く時
三項演算子?:は便利

warning: operator ‘?:’ has lower precedence than ‘|’; ‘|’ will be evaluated first

警告: 演算子 ‘?:’ は ‘|’ よりも優先順位が低い; ‘|’ が先に評価される
[-Wbitwise-conditional-parentheses]


■1.簡潔な式を書く時三項演算子は便利

#include <stdio.h>
int main(void)
{
    for(int i = 0 ;i < 10;i++){
        for(int j = 0 ; j < 10 ;j++){
            int max = (i > j) ? i : j;//★推奨
            printf("%dと%dの最大値は%d\n",i,j,max);
        }
    }
}

聖典 プログラミング言語Cで紹介されている例です。

■2.三項演算子は単純分岐に便利

#include <stdio.h>
#include <time.h>

int main(void){
    int    西暦;
    printf("西暦入れて\n");
    scanf("%d",&西暦);
    printf("%d年は%s\n",
        西暦,
        __isleap(西暦)?
            "閏年です":
            "閏年ではありません"
    );
}

適当に改行すると
if文より簡潔で理解しやすくないですか?

■3.複雑な式に三項演算子は不適切

int f(int flg) {//NG
    int x = 0x80 | (flg == 0) ? 0 : 0xFF00 ;
    return x;
}

0x80 | (flg == 0) ? 0 : 0xFF00 ;は、コンパイラによって
(0x80 | (flg == 0)) ? 0 :0xFF00 ;と解釈されるので、
flg の値に無関係に(0x80 | (flg == 0)) は真と評価されます。


■4.カッコを付けて結合力を明確に

int g(int flg) {//OK    
    int y = 0x80 | ((flg == 0) ? 0 : 0xFF00) ;
    return y;
}

((flg == 0) ? 0 : 0xFF00)のように
3項演算子にカッコつけると良いのですが、
if文で書いたほうが良いかも。

■5.複雑な式は素直にif文を使う

int g(int flg) {  
    if(flg == 0)  return 0x80;
    else           return 0xFF00 | 0x80;
}