#include <stdio.h>
void main()
{ int a=3,b=4,c=5;
a++>--b&&b++>c&&++c;
printf("%d,%d,%d",a,b,c);
}
在程序的第四行,首先a++表示先于--b比较再自加1,--b表示b先自减1在与a++比较,&&是逻辑运算符中“和”,也就是and,他表示要符号两边同时为真他的值才为真,即值为1,否则为假,即为0,b++>c表示比与c比较后自加1,++c表示c先自加1再读。所以最终a加了1变成了4,二b是先减1在加1没变,而c 由于b++>c不成立,++c没有执行,所以c值不变!另外逻辑运算符&如果前面的语句是为假,那么整个语句都为假,而后面的语句就不用执行了!所以是4,3,5!不知你明白否!
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-11-02
a++>--b&&b++>c&&++c;
&&优先级最低, 因此实际为3个:(a++>--b) && (b++>c) && (++c)
然后从左往右, (a++>--b) 即 a > (--b); a++,其中 3>(--4)不满足, C语言最短路原则
因此,只计算了 (a++>--b) ,后面两个没有计算
因此, 等价只做了 a++; --b
a=4, b =3, c=5
&&优先级最低, 因此实际为3个:(a++>--b) && (b++>c) && (++c)
然后从左往右, (a++>--b) 即 a > (--b); a++,其中 3>(--4)不满足, C语言最短路原则
因此,只计算了 (a++>--b) ,后面两个没有计算
因此, 等价只做了 a++; --b
a=4, b =3, c=5
第2个回答 2011-11-02
给你放上括号就行了,考的是运算符优先级
((a++)>(--b))&&((b++)>c)&&(++c);
a++>--b,a是先用a的值运算完了加1,b是先减1再用它运算,就是3>3为假,这时候a=4,b=3,这个表达式为假的话,&&运算符就不继续计算了,这是规定,因为就算后面都为真,整个表达式还是假,所以后面b++>c&&++c都不计算了,所以结果是4 3 5
((a++)>(--b))&&((b++)>c)&&(++c);
a++>--b,a是先用a的值运算完了加1,b是先减1再用它运算,就是3>3为假,这时候a=4,b=3,这个表达式为假的话,&&运算符就不继续计算了,这是规定,因为就算后面都为真,整个表达式还是假,所以后面b++>c&&++c都不计算了,所以结果是4 3 5
第3个回答 2011-11-02
a++>--b&&b++>c&&++c;
先--b即b变成了3,而a++先用后加,所以这时a++>--b等价于3>3结果为假,而&&左边为假时,就不在计算右边的,b++、++c都没有机会执行。当计算出表达式a++>--b&&b++>c&&++c的值之后,a再加1。所以,a,b,c的值分别为4,3,5。
先--b即b变成了3,而a++先用后加,所以这时a++>--b等价于3>3结果为假,而&&左边为假时,就不在计算右边的,b++、++c都没有机会执行。当计算出表达式a++>--b&&b++>c&&++c的值之后,a再加1。所以,a,b,c的值分别为4,3,5。
第4个回答 2011-11-02
首先呢,我讲一下,&&的运行机制是若是左边的条件不成立就不再进行右边的语句。再说一下,++和--,若在变量后则先取值后自增一,再变量前则反之。于是a++>--b其实比的是3>3,如此就不成立,不在执行后面语句。直接执行printf。
第5个回答 2011-11-02
在做与逻辑运算时,若前面有一项为0,后面运算就不执行,在此例中,a++>--b,首先执行b--,所以b=3,c先不执行自减,先比较大小,所以a=b;从而第一个就不满足,所以后面++c不执行,所以c仍等于5.