逻辑运算与的特别之处
#include<stdio.h>
int main(){
int a,b,c;
a=5; b=6;
c=(a<=8)&&(b=7)>5;
printf("c=%d,b=%d\n",c,b); //逻辑与运算符&&要求两个条件都为真才返回真
a=5; b=6;
c=(a<=4)&&(b=7)>5;
printf("c=%d,b=%d",c,b); //a的值是5,即这个条件为假,整个逻辑表达式 (a<=4)为假,故不会执行第二个条件 (b=7)>5
return 0;
}
输出结果
c=1,b=7
c=0,b=6
逻辑运算或的陷阱
#include<stdio.h>
int main(){
int a,b,d;
a=5; b=6;
d=(a>=8)||(b=19)<90;
printf("d=%d,b=%d\n",d,b); //逻辑或运算符||,只要有一个条件为真就返回真
a=5; b=6;
d=(a>=4)||(b=19)<90;
printf("d=%d,b=%d",d,b); //a>=4 为真,即整个逻辑表达式将返回真,第二个条件(b=19)<90不会被执行
return 0;
}
输出结果
d=1,b=19
d=1,b=6
总结
主要是逻辑运算符短路的特性。即,当满足特定条件时,运算过程会提前结束并返回结果,而不必等待所有操作数都运算完。具体来说:
与(&&):如果左操作数为假(0),则不计算右操作数,直接返回假;否则,计算右操作数,并返回运算结果。
或(||):如果左操作数为真(非0),则不计算右操作数,直接返回真;否则,计算右操作数,并返回运算结果。