鱼C论坛

 找回密码
 立即注册
查看: 1482|回复: 2

[已解决]请大佬们帮我判断一下表达式的执行顺序,拜托了

[复制链接]
发表于 2021-2-19 09:40:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a = b - c || a % b && c / d
最佳答案
2021-2-19 11:35:40
a = b - c || a % b && c / d
等价于a = (((b - c) ||( a % b)) && (c / d))

执行顺序存在短路判断:
求值顺序是 b-c, a%b, c/d
解析如下:
括号()优先级高于|| 、&&、=
但是并不是先计算所有括号里的算式
而是整个表达式按左至右的顺序执行下去
首先先计算(b-c)
然后读取||逻辑运算符判断(b-c)是否是非零(如果是非零那么后面就不用再算了(所谓的||短路:||前面是1,||后面就不计算了),直接输出结果a=1)
若(b-c)等于零,则计算(a%b)
若(a%b)为零,因为后面是&&,所以后面的也不计算了(同样是&&短路:若&&前是零后面也不用计算了)
直接输出a=0
若前面都不短路是怎么样的情况呢
a = b - c || a % b && c / d 那就是 b-c 不等于1 ,a%b不等于0 。那么就会一直从左到右算到c/d。
-----------
总结如下:
a = b - c || a % b && c / d
1  先执行b-c
2  根据b-c结果判断是否是||短路
3  若||短路就返回1值给a并结束
4  若非||短路就执行a%b
5  根据1的结果执行1的结果||4的结果
6  根据5的结果判断是否是&&短路
7  若&&短路就返回0值给a并结束
8  若非&&短路就执行c/d
9  根据5的结果执行5的结果&&8的结果
10 最终把9的结果返回给a并结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-19 11:35:40 | 显示全部楼层    本楼为最佳答案   
a = b - c || a % b && c / d
等价于a = (((b - c) ||( a % b)) && (c / d))

执行顺序存在短路判断:
求值顺序是 b-c, a%b, c/d
解析如下:
括号()优先级高于|| 、&&、=
但是并不是先计算所有括号里的算式
而是整个表达式按左至右的顺序执行下去
首先先计算(b-c)
然后读取||逻辑运算符判断(b-c)是否是非零(如果是非零那么后面就不用再算了(所谓的||短路:||前面是1,||后面就不计算了),直接输出结果a=1)
若(b-c)等于零,则计算(a%b)
若(a%b)为零,因为后面是&&,所以后面的也不计算了(同样是&&短路:若&&前是零后面也不用计算了)
直接输出a=0
若前面都不短路是怎么样的情况呢
a = b - c || a % b && c / d 那就是 b-c 不等于1 ,a%b不等于0 。那么就会一直从左到右算到c/d。
-----------
总结如下:
a = b - c || a % b && c / d
1  先执行b-c
2  根据b-c结果判断是否是||短路
3  若||短路就返回1值给a并结束
4  若非||短路就执行a%b
5  根据1的结果执行1的结果||4的结果
6  根据5的结果判断是否是&&短路
7  若&&短路就返回0值给a并结束
8  若非&&短路就执行c/d
9  根据5的结果执行5的结果&&8的结果
10 最终把9的结果返回给a并结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-20 18:59:41 | 显示全部楼层
do8do8do8 发表于 2021-2-19 11:35
a = b - c || a % b && c / d
等价于a = (((b - c) ||( a % b)) && (c / d))

谢谢谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 15:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表