条件操作符&&逻辑操作符
1)条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果!
使⽤条件表达式实现找两个数中较⼤值:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a>b ? a : b;
printf("%d\n", m);
return 0;
}
int m = a>b?a:b;这个如果表达式(a>b)为真,则执行a,否则执行b!
2)&&和||短路问题。
-C语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
说说&&和||的计算规则.
C = A&&B,只有当A和B恒为真,C才为真!
C = A||B,只要A或B有一个为真,则C为真!
int month = 0;
if(month >= 3 && month <= 5){
//语句
}
*由&&操作符可知,当month >= 3和month <=5恒成立,语句才执行,如果month >= 3不成立,那么此结果一定是假,所以后面的month<=3不执行。这种称为“短路”。(跟人一样聪明!!!)
int month = 0;
if(month >= 3 ||month <= 5){
//语句
}
*由||操作符可知,当month >= 3和month <=5只要有一个成立,语句才执行,如果month >= 3成立,那么此结果一定是真,所以后面的month<=3不执行。这种称为“短路”。(跟人一样聪明!!!)
结论:
*对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
*|| 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数
例子:
练习:阅读代码,计算代码输出的结果.
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
原因:
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
原因:i = a++||++b||d++,先计算a++,a++,先使用,后计算,a = 0,为假,之后a = 1,b = 2,++b,先++,b = 3,再使用,为真,对于||来说,只要有一个为真,则整个表达式为真,后面的不计算,得:a = 1,b = 3,c = 3,d = 4。