第11课 - 逻辑运算符使用分析
- 实例分析
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
if( ++i > 0 || ++j > 0 )
{
printf("%d ", i);
printf("%d ", j);
}
return 0;
}
运行结果:1
0
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
if( ++i > 0 && ++j > 0 )
{
printf("%d ", i);
printf("%d ", j);
}
return 0;
}
运行结果:1
1
- 程序中的短路:
||从左向右开始计算,当遇到为真的条件时停止计算,整个表达式为真;所有条件 ;所有条件为假时表达式才为假。
&&从左向右开始计算,当遇到为假的条件时停止计算,整个表达式为假;所有条件为真时表达式才为。
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
if( i++ > 0 || ++j > 0 )
{
printf("%d ", i);
printf("%d ", j);
}
return 0;
}
运行结果:1
1
#include <stdio.h>
int g = 0;
int f()
{
return g++;
}
int main()
{
if( f() && f() )
{
printf("%d ", g);
}
printf("%d ", g);
return 0;
}
运行结果:1
f()第一次调用的时候,返回值是g,它的值是0。对于短路规则,if语句中的内容不会被调用。之后g的值加1,变为1。打印出来。
- “!”到底是什么
C语言中的逻辑符“!”只认得0,只知道见了0就返回1,因此当其作用的值不是0时,其结果为0。
#include <stdio.h>
int main()
{
printf("%d ", !0);
printf("%d ", !1);
printf("%d ", !100);
printf("%d ", !-1000);
return 0;
}
运行结果:1
0
0
0
- 三目运算符
l 三目运算符(a?b:c)可以作为逻辑运算符的载体。
l 规则:当a的值为真时,返回b的值;否则返回c的值。
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
c = a < b ? a : b;
//(a < b ? a : b) = 3; 这样写是错误的
*(a < b ? &a : &b) = 3;
printf("%d ", a);
printf("%d ", b);
printf("%d ", c);
return 0;
}
运行结果: 3
2
1