一、逻辑运算符
C语言有3种逻辑运算符,其逻辑运算对象可以是关系表达式或逻辑表达式,逻辑预算的结果只有”真“或”假“。
单目运算符: !逻辑非
双目运算符: &&逻辑与 || 逻辑或
逻辑非(!):逻辑非运算符的对象如果为”真,那么结果为”假“;若对象为”假“;则结果为”真“
逻辑与(&&):逻辑与运算符的两个逻辑运算对象只要有一个为”假“,那么结果就是”假“,两个都为真,结果才为真
逻辑或(||):逻辑或运算符的两个逻辑运算对象只要有一个为真,那么结果就是真,两个都为假,结果才为假。
二、逻辑运算符的使用
其中!是单目运算符,&&与||是双目运算符,C语言中单目运算符的优先级是高于双目运算符的,所以逻辑非(!)的运算优先级高于关系运算符。而逻辑与(&&)和逻辑或(||)的优先级低于关系运算符。
逻辑运算符经常与if语句搭配使用,用它可以连接关系表达式,例如表示x是否在闭区间[+1,1]中可以表示为if (x >= 1 && x <= 1),表示x>=-1且x<=1那么此表达式的值才为“真”,才会执行if下的语句
注意!!!
逻辑运算符的使用会出现短路的现象,例如当x=-2时,那么if (x >= 1 && x <= 1)这个语句的第一个语句x>-1就为假,此时就可以判断出这个逻辑语句的结果一定就为”假“,程序就不会执行后面一句判断,如果后面有改变x值的语句比如if(x>=-1&&x++<=1)
,那么此时x++就不会执行,即执行完此if语句后,x的值仍然为-2.一定注意!!!
踩坑如下:(来源于梯队测试题目)
void Error1(void)
{
int a = -2, b = 2;
for (; ++a && --b;);
printf("%d,%d\n", a, b);
//结果为0,1;
//经测试预测逻辑:for循环终止条件为0,发生于0 && x(x为任意值)或 x && 0
//出现”短路“情况,判断后b未更改赋值,仅改变a值后直接判断结束循环
//当且仅当这两种情况才能终止循环:若将a赋值为-5,
//则由b先到达0值结束循环,故最终结果为-3,0
}