基本语法
条件表达式 ? 表达式 1: 表达式 2;
1) 如果条件表达式为非 0 (真),运算后的结果是表达式 1;
2)如果条件表达式为 0 (假),运算后的结果是表达式 2;
3)口诀: 一灯大师 =》 一真大师
案例演示
#include<stdio.h>
void main(){
int a = 10;
int b = 99;
int res = a > b ? a++ : b--; // 一真大师
// int n1 = a > b ? 1.1 : 1.2; // 警告 double -> int
printf("\n a = %d b=%d res=%d", a, b, res); // a = 10 , b=98, res = 99
}
使用细节
1)表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换), 否则会有精度损失 。
2)三元运算符可以转成 if–else 语句。
课堂练习
1)案例 1:实现两个数的最大值 (a , b )
2)案例 2:实现三个数的最大值
#include<stdio.h>
void main(){
int a = 10;
int b = 100;
int c = 199;
int max = a > b ? a : b;
int max2 = max > c ? max : c;
int max3 = (a > b ? a : b) > c ? (a > b ? a : b) : c; // ok
printf("max = %d",max);
printf("\nmax2 = %d",max2);
printf("\nmax3 = %d",max3);
}
运算符优先级小结:
1)结合的方向只有三个是从右向左,其余都是从左向右
2)所有的双目运算符中只有赋值运算符的结合方向是从右向左
3)另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()
4)逗号的运算符优先级最低
5)说一下优先级的大概的顺序 算术运算符 > 关系运算符 > 逻辑运算符(逻辑非! 除外) > 赋值运算符 > 逗号 运算符
6)注意不需要刻意的记, 常用就慢慢有印象.