欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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这个运算并没有执行。

C语言基础之逻辑运算符的短路

【总结】

    对于逻辑运算a && b,如果a为false,则不进行b的运算判定;对于逻辑运算a || b,如果a为true,则不进行b的运算判定,这一点是要特别注意的。

相关标签: c语言