int i=-1,j=2,k; do{ k=++i&&--j;i++; }while(k);printf("%d,%d",i,j) 请问为什么输出1,2?

 我来答
洛雨曦1125
2012-07-20 · TA获得超过1345个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:97.8万
展开全部
int i=-1,j=2,k;
do{
k=++i&&--j;//逻辑表达式,k的值要不为1,要不为0。而这项k=++i&&--j先计算++i计算完i的值为0,这里再跟据短路特性,--j就不用计算。所以k=0,
i++; //再执行i=i+1;所以i=1
}while(k);//这时条件为假
printf("%d,%d",i,j)所以输出来为1,2
小新_没蜡笔23
2012-07-20 · TA获得超过383个赞
知道答主
回答量:126
采纳率:0%
帮助的人:70.3万
展开全部
因为执行的顺序是这样的,K=++I 计算出K=0,因为0&&--J必须两个条件同时成立是才为真,所以,第一个条件为假,第二个条件根本不执行,直接返回假,所以--J根本没执行,然后执行了I++,因为K=0了,所以跳出循环,这时I=1,而J依然=2
追问
感觉你的回答不正确呢   因为执行的顺序是这样的,K=++I   计算出K=0  这就错了
追答
你觉得哪里错了呢?因为K=0了,退出循环了,才会打印出1和2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangwen1994
2012-07-20 · TA获得超过358个赞
知道小有建树答主
回答量:153
采纳率:0%
帮助的人:173万
展开全部
先执行 ++i 此时 i=0 再 i&& 但因为 i=0 所以 不继续判断 后面语句 故--j 不执行 且k=0 接着 ++i 此时 i=1 k=0 所以跳出循环 ,最后 i=1,j=2
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yl62803112
2012-07-20 · TA获得超过416个赞
知道小有建树答主
回答量:694
采纳率:100%
帮助的人:211万
展开全部
搞明白两个问题就明白了。
赋值语句恒为真。
&&操作符是短路运算,就是说比如:x&&y 如果x为真,就没必要计算下去了,整个式子恒为真。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式