自减问题的请教~~

发布时间:2024-05-16 20:34 发布:上海旅游网

问题描述:

小弟不懂,想请教下
#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 ????

问题解答:

&&代表逻辑与,如果它前面的表达式的值已经为零,则不进行&&之后的表达式的运算;同样,如果是逻辑或,若“或”前面的表达式的值已经是1,则它后面的表达式不进行计算

= (++a <0) && !(b-- <=0);

由于第一个判断(++a < 0)为false(a的值为0)
无论&&后面的判断是真是假,最终的结果都是false
因为 false && 任意 都等于 false

在C/C++中,如果根据前面的条件能够得出最后结果,那么后面的判断语句不会执行!
因此后面的条件不用判断,没有执行!
因此b的值仍然为4

&&代表逻辑与,如果它前面的表达式的值已经为零,则不进行&&之后的表达式的运算;同样,如果是逻辑或,若“或”前面的表达式的值已经是1,则它后面的表达式不进行计算,++a是一个前缀表达式,先将a的值加1再在表达式中使用。例如若为后缀表达式a++,则a++的结果是-1;因此题中++a的结果为0,0不小于0,所以为假,不再计算后面的表达式,所以)!(b-- <=0)没有计算,因此b的值仍然为4。

热点新闻