(逻辑操作符的短路现象)
1.逻辑操作符
&& 逻辑与 || 逻辑或
&&
是操作符两侧表达式同时为真时,才为真;只要有一个假,结果就为假
||
是操作符两侧表达式同时为假时,才为假;只要有一个真,结果就为真
这里十分容易理解,所以不多说
2.逻辑操作符的短路
这里看几个例子就可理解:
&&的短路
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b
//i = a++||++b||d++;
printf(a = %d\nb = %d\nc = %d\nd = %d\n, a, b, c, d);
return 0;
}
这段代码输出什么?
解析:
a++
表达式的结果为0,因为逻辑与是有一个表达式为0,结果就为0,所以右边的式子不会进行运算
所以输出:a = 1,b = 2,c = 3,d = 4
这种现象叫:短路
&&
操作符,左边为假,右边无需计算
现在把a的值改为1,再来看看
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ && ++b
//i = a++||++b||d++;
printf(a = %d\nb = %d\nc = %d\nd = %d\n, a, b, c, d);
return 0;
}
输出结果:
a++
为真,继续计算,++b
也为真,此时a++&&++b
为真,继续计算d++
这里所有的语句都被运算了
||的短路
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++||++b||d++;
printf(a = %d\nb = %d\nc = %d\nd = %d\n, a, b, c, d);
return 0;
}
结果:
a++
的值为1,因为是||
操作符,有一个为1,结果就为1,后面式子等于多少都无所谓,所以右边的式子不会计算
**对于||
操作符,左边为1,右边的式子不进行计算。这也叫短路
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++||++b||d++;
printf(a = %d\nb = %d\nc = %d\nd = %d\n, a, b, c, d);
return 0;
}
a++
值为0,继续计算,++b
为3,所以a++||++b
为真,所以后面的d++
不进行计算
3.总结
- &&的短路:左边为假,右边无需计算
- ||的短路:左边为真,右边无需计算
- 这些点十分容易理解,但是也容易被忽略,所以要细心读完此文