常见的运算符(按优先级排序):
- 一元运算符,也叫单目运算符,常见:++(自加)、–(自减)、!(逻辑非)、~(按位取反)
- 四则运算符,加减乘除
- 位移运算符,<<(左移)、>>(右移)
- 关系运算符,大于、等于、小于、大于等于、小于等于
- 逻辑运算符,&&(逻辑与)、||(逻辑非)
短路运算
逻辑表达式,包含两个逻辑运算符||和&&,这两个是用短路运算形式来进行运算。
当 || 的表达式中,有一边的结果为真,那么另一边不用再去判断,结果直接为真。
当 && 表达式中,有一边的结果为假,那么另一边不用再去判断,结果直接为假。
当一个表达式中,同时包含了||、&&这两个逻辑运算符,&&(逻辑与)的优先级高于 ||(逻辑或) 。
题目:
1、分别计算 x=4,x=9,x=11时,表达式的结果,与x的值。
x>5&& x<<8-7>20 || !(x++<15)
2、分别计算x=4,x=9,x=11时,表达式的结果,与x的值。
x>5||x<<8-7>20 && !(x++<15)
分析过程:
两个表达式中,存在3个相同的表达式,分别是x>5、x<<8-7>20、!(x++<15),这里设计测试用例使用了边界值法。
测试x>5,当x=4,就是其中的边界值之一。
x<<8-7>20,意思是x左移一位8-7位后大于20,即x左移1位后大于20,即x大于10。当x=9,就是边界值之一。
因此。
题目1的表达式可简化为 (x>5&& x>10)|| !(x++<15)
题目2的表达式可简化为 x>5||(x>10 && !(x++<15))
计算过程:
题目1:(x>5&& x>10)|| !(x++<15)
x=4时:
1. &&会导致短路,所以先计算x>5,结果为false。
2. 因为x>5的结果为假,所以x>10不再运算,所以&&的结果为false。
3. 此时表达式为false|| !(x++<15),需要进行后面的计算, !(x++<15) 等于 !(4<15) ,!(4<15)的结果为false。x在这步做了自加,x的值变成了5。
4. 表达式为 false||false 。所以最终结果为false。x的值为5。
当x=9时:
1. &&会导致短路,所以先计算x>5,结果为true。
2. 因为x>5的结果为真,所以x>10需要继续判断,x>10的结果为false,所以&&的结果为false。
3. 此时表达式为false|| !(x++<15),需要进行后面的计算, !(x++<15) 即为 !(9<15) ,!(9<15)的结果为false。x在这步做了自加,x的值变成了10。
4. 表达式为 false||false 。所以最终结果为false。x的值为10。
当x=11时:
1. &&会导致短路,所以先计算x>5,结果为true。
2. 因为x>5的结果为真,所以x>10需要继续判断,x>10的结果为true,所以&&的结果为true。
3. 此时表达式为true|| !(x++<15),不再进行后面的计算,x的值仍为11。
4. 所以最终结果为true。x的值为11。
题目2:x>5||(x>10 && !(x++<15))
x=4时:
1. x>5的结果是false,所以进行后面的计算,变为false||(x>10 && !(x++<15))。
2. 因为x>10的结果为假,所以!(x++<15))不再运算,所以x的值不发生变化,x的值仍为4。&&的结果为false。
3. 表达式为 false||false 。所以最终结果为false。x的值为4。
x=9时:
1. x>5的结果是true,所以不再进行后面的计算,所以x的值不发生变化,x的值仍为9。
2. 所以最终结果为true。x的值为9。
x=11时:
1. x>5的结果是true,所以不再进行后面的计算,所以x的值不发生变化,x的值仍为11。
2. 所以最终结果为true。x的值为11。
总结:有多个短路运算符时,&&的优先级高于||。运算顺序从左向右计算。