逻辑操作符的短路现象
1.逻辑操作符
2.逻辑操作符的短路
&&的短路
||的短路
3.总结
1.逻辑操作符
&& 逻辑与
|| 逻辑或
&&是操作符两侧表达式同时为真时,才为真;只要有一个假,结果就为假
||是操作符两侧表达式同时为假时,才为假;只要有一个真,结果就为真
这里十分容易理解,所以不多说
2.逻辑操作符的短路
这里看几个例子就可理解:
&&的短路
int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; //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 && d++; //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.总结
&&的短路:左边为假,右边无需计算
||的短路:左边为真,右边无需计算
这些点十分容易理解,但是也容易被忽略,所以要细心读完此文