短路运算符:&&、|| 逻辑与、逻辑或
短路原则:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
短路运算的规则:
(1)a&&b&&c。只有a为真(非0),才需要判别b的值。只有当a和b都为真的情况下,才需要判别c的值。如果a为假,无需判别b和c的值。如果a为真、b为假,无需判别c的值。
(2)a||b||c。只要a为真(非0),不必判断b和c。只有a为假,才判别b。a和b都为假,才判别c。
运算符 | 含义 | 举例 | 说明 |
&& | 逻辑与 | a&&b | 如果a和b都为真,则结果为真,否则为假。 (那么a为假,可直接判定a&&b为假) |
|| | 逻辑或 | a||b | 如果a和b有一个为真,则结果为真;两者都为假时,结果才为假。 (那么a为真,可直接判定a||b为真) |
示例:
例1:已知 A=7.5,B=2,C=3.6,表达式 A>B&&C>A||A<B&&!C>B 的值是___0___。
运算符优先级(高——>低) 结合律 > 从左往右 &&、||、! 从左往右 解答:A>B=1,C>A=0 ——> A>B&&C>A=0
A>B&&C>A=0,A<B=0 ——> A>B&&C>A||A<B=0
A>B&&C>A||A<B=0 ——> A>B&&C>A||A<B&&!C>B=0
&&左边为假,可直接判定表达式为假,无需判别右边表达式!C>B为真为假
例2:int x=1,y=0,z=2,表达式 y++ && ++z || ++x 的值是__1___。
运算符优先级(高——>低) 结合律 ++ 从右往左 &&、|| 从左往右 解答:y++=0 ——>y++ && ++z=0,逻辑计算短路
y++ && ++z =0,++x=2(非0)——>y++ && ++z || ++x=1
例3: 若有定义语句:“int k1=10, k2=20;”,则执行表达式“(k1=k1>k2) && (k2=k2>k1)” 之后,k1和k2的值分别是( )。
运算符优先级(高——>低) 结合律 () 从左往右 > 从左往右 && 从左往右 = 从右往左 解答:表达式整体的计算是从左至右
先计算(k1=k1>k2):k1>k2=0,k1=0 ——>(k1=k1>k2) && (k2=k2>k1)=0,逻辑计算短路
∴k1=0,k2=20