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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨冬武 中级黑马   /  2016-2-1 13:46  /  1787 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了老师的视频有如下内容:
int x = 1,y = 1,z =1;
(++x) || (y++) && (z++);
printf("x = %d,y = %d,z = %d\n",x,y,z);
结果为:
x = 2,y = 1,z = 1
解释为(++x)为1之后程序“或短路”,这样后面的就不执行了

小弟新人,初级黑马,有一疑问

&&的优先级为11,||的优先级为12,为什么不是先运算&&,在进行||的运算
相当于给后面加了个括号
如下:
(++x) || ((y++) && (z++));
这样不是y++和z++都会进行运算
输出结果为:
x = 2,y = 2,z = 2

还请赐教,多谢!

12 个回复

倒序浏览
石门一梦 来自手机 中级黑马 2016-2-1 14:59:38
沙发
加油!!            
回复 使用道具 举报
编译器编译代码要遵循从上到下从左到右的原则   

评分

参与人数 1黑马币 +1 收起 理由
杨冬武 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
考虑 || 的结合性,从左到右,碰见第一个值为真时,不会再执行后面的语句,也就是所谓的或短路。希望对你有所帮助。

点评

谢谢,有点懂了  发表于 2016-2-1 23:38

评分

参与人数 1黑马币 +1 收起 理由
杨冬武 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
ios_Beginner 发表于 2016-2-1 18:27
考虑 || 的结合性,从左到右,碰见第一个值为真时,不会再执行后面的语句,也就是所谓的或短路。希望对你有 ...

这个时候不用考虑优先级是吗?优先级在高也要从左向右进行运算
回复 使用道具 举报
杨冬武 发表于 2016-2-1 23:37
这个时候不用考虑优先级是吗?优先级在高也要从左向右进行运算

正如你说的,  因为考虑了优先级,所以源代码才相当于 (++x) || ((y++) && (z++));
此时考虑优先级的话应该考虑(++x)和((y++) && (z++))的优先级的先后,()与()的优先级是平级的,所以考虑 || 的结合性,得到结果。
回复 使用道具 举报
当||和&&同时出现时,放弃优先级,从左到右计算
回复 使用道具 举报
||或判断一个成功,后面的不需判断便能返回TRUE所以后面的不做计算,
回复 使用道具 举报
http://bbs.itheima.com/thread-276613-1-1.html这是我跟班里人总结的,不知道对不对,我们也是小白,求大神能给个准信
回复 使用道具 举报
水丹青 发表于 2016-2-2 13:56
当||和&&同时出现时,放弃优先级,从左到右计算

这不对吧,你在哪里看到的
回复 使用道具 举报
先预判断,如果从左到右执行不影响其最终结果的话就从左到右执行,不按照优先率
回复 使用道具 举报
编译器规定就是从上到下编译的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马