关于C语言自加自减问题?

#include<stdio.h>main(){inta=-1,b=1;if((++a<0)&&(b--<=0))printf("%d%d\n",a,b);elsepri... #include<stdio.h>
main()
{int a=-1,b=1;
if((++a<0)&&(b--<=0))
printf("%d%d\n",a,b);
else
printf("%d%d\n",b,a);
}

为什么答案是10?为什么b是1?求详解!衷心感谢!
展开
 我来答
百度网友35bceeb
2013-03-17
知道答主
回答量:7
采纳率:0%
帮助的人:9.3万
展开全部
if((++a<0)&&(b--<=0))
由上可知,a是前置自加运算,会在<运算符之前计算出结果,而b是后置自减运算,<运算符之后才会计算
那么&&两边的运算若均执行的话,左边的值为假,右边的值也为假,因此不论如何都是会走到else里去的.
a的值为0是无悬念了,但b为啥是1呢?
因为&&运算符的执行顺序为左先右后,当左边的值计算出来后,若为false,就不需要再计算右边的值,直接返回false了
也就是说,右边的(b--<=0)并没有被执行.
综上,最后a为0,b为1,输出结果为10
zl02655931
2013-03-17 · TA获得超过363个赞
知道小有建树答主
回答量:420
采纳率:0%
帮助的人:354万
展开全部
详解没用,关键靠你自己领悟,相信逻辑和条件运算符你都懂,那么我们来研究一下++i和i++的区别。
分别运行如下代码试试,你就会有更深刻的理解
#include<stdio.h>
main()
{
int i = 1; printf("i=%d,i=%d",++i,i++);

}
答案是i=2,i=1
所以,你应该明白这个原因了吧。一个是先加后赋值,一个是先赋值后加。
至于你纠结的10,很简单。因为打印符printf要求的是两个%d%d,所以,输出来的自然是10,如果这样写,你就明白了%d,%d,结果自然变成了1,0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chujiangke001
2013-03-17 · TA获得超过1605个赞
知道小有建树答主
回答量:1352
采纳率:0%
帮助的人:682万
展开全部
先++a得到a等于0,条件短路不执行b--,b依然为1
printf("%d%d\n",b,a);输出b=1,a=0;

c条件短路 自己google
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山间流云ZbM30
2013-03-17
知道答主
回答量:32
采纳率:0%
帮助的人:24.6万
展开全部
++a<0 a+1 再进行判断 a=0
b--<=0 b先判断 已经进入判断句
b-1 已经在判断句后面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1402202541
2013-03-17
知道答主
回答量:60
采纳率:0%
帮助的人:18.2万
展开全部
printf("%d%d\n",a,b);你的两个输出没有分开所以看着是10,其实一个是1,,一个是0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式