A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泥娃娃 中级黑马   /  2016-3-21 09:46  /  1752 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int x, y, z, result;
  2.     x = y = z = 0;
  3.     result = ++x ||(++y&&z++);
  4.     printf("x=%d,y=%d,z=%d,result=%d\n",x,y,z,result);
  5.     return 0;
复制代码
输出结果并非是1,1,1,1.而是1,0,0,1
是因为逻辑或短路了,
A&&B,若A为假,结果为假,B就不执行了,这就是逻辑与短路。
A||B,若A为真,结果为真,B就不执行了,这就是逻辑或短路。
本题中发生的就是逻辑或短路了,因此y,z都没有尽兴计算。

5 个回复

正序浏览
学习了         
回复 使用道具 举报
出选择题的时候要小心了,这地方陷阱非常多!
回复 使用道具 举报
学到了                                                        
回复 使用道具 举报
请问,当逻辑运算符与自增或自减运算符一起使用的时候,是不是不用考虑逻辑运算符的优先级啊?
回复 使用道具 举报
好吧,学习了,我也犯错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马