C语言基础之逻辑运算符的短路
程序员文章站
2024-03-08 08:31:03
...
C语言的逻辑运算符是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算。考虑以下代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
a = 123, b = 456;
if(a == 13 && (b += 1))
printf("b进行运算后为%d\n", b);
else
printf("b进行运算后为%d\n", b);
}
在进入复合逻辑判断if (a == 13 && (b += 1))时,则自左向右进行运算,在判定完a == 13为false后,该逻辑运算&&后的b += 1就不再进行下去,整个复合逻辑表达式直接返回值false。因此,对于该if语句来说,判定为假,进入else语句。
【注】第一次进行编译的时候出现了error,主要原因是
if(a == 13 && (b += 1))
这句话我错误地写成了
if(a == 13 && b += 1)
这样,就会导致&&的运算符优先级比+=1的优先级要高,所以编译器会报错:+=没有有效的左值。(所以说运算符的优先级是个默认的小妖精)
我们可以看到打印输出的结果是“b进行运算后为456”,这就说明,b += 1这个运算并没有执行。
【总结】
对于逻辑运算a && b,如果a为false,则不进行b的运算判定;对于逻辑运算a || b,如果a为true,则不进行b的运算判定,这一点是要特别注意的。
上一篇: Java 线程池框架