●优先级 从右向左 ●结合方向 &&(11 & 2)低 例a=4:b=5 a&&b alb ab 4&&0|2 5>3&&2|8<4-!0 c&&d
! (2) && (11) || (12) 高 低 ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5>3&&2||8<4-!0 ‘c’&&‘d’ < > 值为1 值为0 值为1 值为1 值为1 值为1 //(5>3)&&2||(8<(4-(!0))) 值为1 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
●优先级 从右向左 ●结合方向 &&(11 & 2)低 短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑远算符才能 求出表达式的解时,才执行该运算符 例a&&b&&c 例alb|c 例a=1;b=2;c=3;d=4;m=1;n= (m=a>b)&&(n=c>d)
! (2) && (11) || (12) 高 低 ⚫优先级: ⚫结合方向: ! :从右向左 && :从左向右 || :从左向右 ⚫短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑运算符才能 求出表达式的解时,才执行该运算符 < > 例 a&&b&&c //只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值 例 a||b||c //只在a为假时,才判别b的值; 只在a、b都为假时,才判别 c的值 例 a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d) //结果m=0,n=1 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C
★条件运算符与表达式 般形式: exprI?expr2:expr3 ◇执行过程 ☆功能:相当于条件语句,但不能取代一般ⅲ语旬 运符下嵌套 如(X%2=1)?1:0 10 b); htf(%d"Ja>b? a: b) X>=0)?x:-x 非C 予优,级c<=z)?ca+Ac expI ☆结合方向:自右向左取ep2值 取expr3值 sn a>b?a: c>d?c:d a>b?a: (c>dgc: d) ☆ exprI、expr2、expr3类型可不同,表达式值取较高的 类型 例x?a1:b/=0,表达式值为“b';x+0,表达式值为a xy?1:1.5/Xy,值为10;xy,值为1.5 ●●
条件运算符与表达式 ❖一般形式: expr1 ? expr2 : expr3 ❖执行过程 ❖功能:相当于条件语句,但不能取代一般if语句 例 if (a>b) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,a>b?a:b); 例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b); expr1 取expr2值 取expr3值 非0 =0 例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c ❖条件运算符可嵌套 如 x>0?1:(x<0?-1:0) ❖优先级: 13 ❖结合方向:自右向左 如 a>b?a:c>d?c:d a>b?a:(c>d?c:d) ❖expr1、expr2、expr3类型可不同,表达式值取较高的 类型 < > 例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 语 言 程 序 设 计 第 五 章 选 择 结 构 设 计 C