逻辑运算符
与:&& ,或:||, 非:!
短路法则:
&&: 前后语句为真,结果为真
int a=0,b=1,c;
c=a && ++b;
printf("%d %d %d\n",a,b,c); //0 1 0
//a=0假,直接跳过++b,不执行++b,所以b输出1
int a=0,b=1,c;
c=a++ && ++b;
printf("%d %d %d\n",a,b,c); //1 1 0
//a++先使用后再+1,a=0假,直接跳过++b,不执行++b,所以a输出1,b输出1
int a=0,b=1,c;
c=++a && ++b;
printf("%d %d %d\n",a,b,c); //1 2 1
//++a,先自加1,a=1真,再执行++b,b先+1再使用,b=2真,前后语句都为真,所以a输出1,b输出2,c输出1
当&&第一个语句为假时,短路不执行后面的语句
||: 前后两条语句都为假,结果为假;有一条语句为真,则结果为真
int a=1,b=1,c;
c=a || ++b;
printf("%d %d %d\n",a,b,c); //1 1 1
//a=1真,直接跳过++b,不执行++b,所以b输出1
int a=1,b=1,c;
c=a-- || ++b;
printf("%d %d %d\n",a,b,c); //0 1 1
//a--,先使用再自减,a=1真,直接跳过++b,不执行++b,a自减a=0,所以a输出0,b输出1
int a=1,b=1,c;
c=--a || ++b;
printf("%d %d %d\n",a,b,c); //1 1 1
//--a,先自减再使用,a=0假,执行++b,先自加再使用,b=2真,所以a输出0,b输出2,c输出1
当||第一个语句为真时,短路不执行后面的语句