int i=1,j=1,k=1; printf("%d\n",++i||++j&&++k); printf("%d %d %d\n",i,j,k); 答案为什么是 1 2 1 1求解

 我来答
Apple林
2013-01-24 · TA获得超过2093个赞
知道小有建树答主
回答量:895
采纳率:66%
帮助的人:558万
展开全部
对于C++,||运算是,如果左边部分是1,那么右边不需要判断,直接返回1;
所以对于++i||++j&&++k,++优先级高于||,首先判断++i,i=2是true,所以直接返回1,后面不需要判断了。
所以输出1;
而j,k值没有改变,i变成2;
所以输出:2,1,1
追问
额。。是c,呵呵
按优先级的话,首先是++,其次不是&&,最后才是||么
追答
因为&&优先级高所以把第二个式子看成",++i||(++j&&++k);
然后再看||,由于或运算的结合方向是自左向右,所以先进行左边的++i,使x变为1,此时整个式子为true,就不用进行后面且运算了.
这种求值策略为“短路求值”。
634841302
2013-01-24 · TA获得超过173个赞
知道答主
回答量:110
采纳率:100%
帮助的人:68.4万
展开全部
int i=1,j=1,k=1;
printf("%d\n",++i||++j&&++k);
printf("%d %d %d\n",i,j,k);

这里的||是短路或,在++i满足时,直接不执行后面的判断,返回真。
此时的i=2,j和k由于没执行,所以还是1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PHPJungle
2013-01-24 · TA获得超过2130个赞
知道小有建树答主
回答量:247
采纳率:50%
帮助的人:232万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式