一个有趣的问题
下面的程序运行后,i,j,k的值分别是多少?
int i = 0;
int j = 0;
int k = 0;
++i || ++j && ++k;
结果为1,0,0
程序中的短路:
- || 从左向右开始计算
- 当遇到真的条件时停止计算,整个表达式为真
- 所有条件为假时表达式才为假
- && 从左到右开始计算
- 当遇到假的条件时停止计算,整个表达式为假
- 所有条件真时表达式才为真
逻辑表达式中,&& 比 || 具有更高的优先级
逻辑非的使用
例子1:逻辑非的使用
#include<stdio.h>
int main()
{
printf("%d
",!0);
printf("%d
",!10);
printf("%d
",!110);
printf("%d
",!-110);
return 0;
}
小结
- 程序中的逻辑表达式遵从短路规则
- 在&&与||混合运算时
- 整个表达式被看做||表达式
- 从左到右先计算&&表达式
- 最后计算||表达式
- 逻辑非!运算符只认0,碰见0返回1,否则都返回0