问题描述:
小弟不懂,想请教下
#include <stdio.h >
main()
{int a=-1,b=4,k;
k=(++a <0)&&!(b-- <=0);
printf("%d%d%d\n",k,a,b);}
答案是004
可是b的值怎么是4呢,为什么不是3 ????
问题解答:
k=(++a <0)&&!(b-- <=0);
++a先执行,执行后,a=0,然后a<0不成立,也就是说
(++a<0)这个式子的结果为0,所以编译器可以马上判断
(++a <0)&&!(b-- <=0)这个的式子为0,换句话说,!(b-- <=0)并没有执行,所以b=4
= (++a <0) && !(b-- <=0);
由于第一个判断(++a < 0)为false(a的值为0)
无论&&后面的判断是真是假,最终的结果都是false
因为 false && 任意 都等于 false
在C/C++中,如果根据前面的条件能够得出最后结果,那么后面的判断语句不会执行!
因此后面的条件不用判断,没有执行!
因此b的值仍然为4
(++a <0)&&!(b-- <=0);
&&运算规则:如果前面为0则不用理会后面的表达式
上面(++a 为0后面就不用算了,整个表达式的结果为0,即k=0,而a的结果为0,b的结果依然为4
这和编译器有关
你的表达式
(++a <0)&&!(b-- <=0))
前部分 ++a<0 的值为flase,那么有的编译器 && 后面就不再计算了
就好像 || 一样,如果||前的部分为真,它后面的也不会再去计算
如果你把
(++a <0)&&!(b-- <=0)
改为
(++a <1)&&!(b-- <=0)
那么答案就是103了
C语言中的&&符号只有在他的前半部分为真的情况下才会去执行他的后半部分. 因为如果前半部分为假的话,不论他后半部分时候为真,这整个式子都是假的.而++a < 0得到的结果是假的.使用后面的!(b-- <=0)根本没有执行.b也就是他的原来的值就是4了.
同理的还有||符号.这个运算符只有在前半部分的执行结果为假时才会执行后半部分.
好多都忘了