在课本上做练习题时遇到的问题
#include
int main()
{
int a,b,c;
a=b=c=1;
--a||b++&&c++;
printf("%d,%d,%d\n",a,b,c);
++a&&--c||++b;
printf("%d,%d,%d\n",a,b,c);
++a||--b||--c;
printf("%d,%d,%d\n",a,b,c);
a--&&--b||++c;
printf("%d,%d,%d\n",a,b,c);
}
结果如下
0,2,2
1,2,1
2,2,1
1,1,1
为什么在第一行执行后输出结果显示 “||”也就是“或”逻辑运算符 两边同时执行后的结果
而后面几行只运算了 “或” 前面的代码
这个是因为--a||b++&&c++这个式子先运行了--a,a变成0了,那么||左边就是False,那么它就还要看右边部分的情况,而后面的,比如:
++a&&--c||++b,这里++a后变成1了,那么||左边就是True了,||右边就没有 必要看了
因为--a的结果为0,所以需要计算||右侧表达式的结果才能确定整个表达式的结果
而后面++a,a--时,a都不是0,所以||后面的表达式不用执行,整个表达式结果肯定是真
或的运算规则是: 或前面的表达式为false时才会计算后面的表达式
与的运算规则是: 与前面的表达式为true时才会计算后面的表达式.
明白这两条规则就理解这段程序了