
关于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?求详解!衷心感谢! 展开
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?求详解!衷心感谢! 展开
展开全部
if((++a<0)&&(b--<=0))
由上可知,a是前置自加运算,会在<运算符之前计算出结果,而b是后置自减运算,<运算符之后才会计算
那么&&两边的运算若均执行的话,左边的值为假,右边的值也为假,因此不论如何都是会走到else里去的.
a的值为0是无悬念了,但b为啥是1呢?
因为&&运算符的执行顺序为左先右后,当左边的值计算出来后,若为false,就不需要再计算右边的值,直接返回false了
也就是说,右边的(b--<=0)并没有被执行.
综上,最后a为0,b为1,输出结果为10
由上可知,a是前置自加运算,会在<运算符之前计算出结果,而b是后置自减运算,<运算符之后才会计算
那么&&两边的运算若均执行的话,左边的值为假,右边的值也为假,因此不论如何都是会走到else里去的.
a的值为0是无悬念了,但b为啥是1呢?
因为&&运算符的执行顺序为左先右后,当左边的值计算出来后,若为false,就不需要再计算右边的值,直接返回false了
也就是说,右边的(b--<=0)并没有被执行.
综上,最后a为0,b为1,输出结果为10
展开全部
详解没用,关键靠你自己领悟,相信逻辑和条件运算符你都懂,那么我们来研究一下++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
分别运行如下代码试试,你就会有更深刻的理解
#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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先++a得到a等于0,条件短路不执行b--,b依然为1
printf("%d%d\n",b,a);输出b=1,a=0;
c条件短路 自己google
printf("%d%d\n",b,a);输出b=1,a=0;
c条件短路 自己google
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
++a<0 a+1 再进行判断 a=0
b--<=0 b先判断 已经进入判断句
b-1 已经在判断句后面
b--<=0 b先判断 已经进入判断句
b-1 已经在判断句后面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%d%d\n",a,b);你的两个输出没有分开所以看着是10,其实一个是1,,一个是0.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询