在C语言中,逻辑运算符有&&、||、!
&&表示“与”的意思,需要两端的表达式的值都为true,该式的值才为true。
||表示“或”的意思,两端的表达式的值只要有一端为true,该式的值就为true。
!表示“非”的意思,将该式的真值换成相反的真值,即false和true互换。

但是在C99里有这样的一个名为“短路”的特性

使用&&时,如果左边false则右边不会执行
使用||时,如果左边true则右边不会执行

&&运算符,举例:

#include<stdio.h>
int main()
{
	int a=-1,b=0;
	if(a++&&b++)
		printf("%d %d",b,a);
	if(++b&&++a)
		printf("%d %d",a,b);
	return 0;
}

想想程序的输出结果是什么?

答案是:1 2

程序的流程是:先定义变量a=-1,b=0,然后进入第一个if()判断,&&左边的值是-1,右边的值为0,所以此if()下的语句不执行,但是由于&&左侧为true,所以&&右侧的b++也会得到执行,此行结束时,a的值为0,b的值为1。
第二次if(),左边的值为2,右边的值为1,所以`if()``下的语句得到执行,输出a的值1,b的值2。

||运算符同理,如果左边的表达式的值为true,则右边的表达式不会执行。

更多推荐

C语言逻辑运算符