鱼C论坛

 找回密码
 立即注册
查看: 2242|回复: 11

[已解决]优先级的问题

[复制链接]
发表于 2017-8-3 06:18:31 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼出的课后题目:
not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9, 即使按照其优先级,加上相应的括号,变成: (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9),再简化成: 0 or 1 or 4 or 6 or 9 (小甲鱼的简化答案是: 0 or 0 or 4 or 6 or 9, 第二个是0,貌似有误,还是我错了?)
我还是看不懂,为什么最终变成了4? 这个短路逻辑没理解~~
最佳答案
2017-8-3 10:29:04

  1. 1,先not
  2. (not 1) or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9

  3. 2,然后and
  4. (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8) and 9

  5. 3,还有一个and
  6. (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or ((7 and 8) and 9)

  7. 4,最后顺序or
复制代码


2017-08-03_102723.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-3 08:07:40 | 显示全部楼层
0 and 1 == 0
0 or 0 or 4 or 6 or 9,前两个都为0,再看第三个,不是0了,就取它的值:4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 08:51:21 | 显示全部楼层
本帖最后由 圆冶治 于 2017-8-3 09:03 编辑

这个是小甲鱼说过的“短路逻辑”。这是逻辑操作符才有的,“or“的两边只要一边条件为真就判断为真,这个代码就不会继续执行下去了。
0 or 0 or 4 or 6 or 9
这段代码到4为真,所以就不会再判断接下去的代码为真为假了,或大或小了。
(0 and 1) "and" 是判断两边条件都要为真才会为真,一边为假也会判断为假,0就是一个假的条件,所以整个判断为假,所以就是0了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 08:59:38 | 显示全部楼层
本帖最后由 sunnychou 于 2017-8-3 15:01 编辑

LH)_Q2PK(9HU_ANZV6LL.png

  1. >>> not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
  2. 4
  3. >>> not 1 or 0 and 1 or 3 and 4
  4. 4
  5. >>>
复制代码

多有不对的地方,更新一下
运算级的优先级:

  1. lambda        Lambda表达式
  2. or        布尔“或”
  3. and        布尔“与”
  4. not x        布尔“非”
  5. in,not in        成员测试
  6. is,is not        同一性测试
  7. <,<=,>,>=,!=,==        比较
  8. |        按位或
  9. ^        按位异或
  10. &        按位与
  11. <<,>>        移位
复制代码


执行顺序,not -> and -> or
(not 1 )or( 0 and 1 )or (3 and 4)
or先考虑第一个,如果为真,后面就不会计算了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 10:24:38 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-3 10:29:04 | 显示全部楼层    本楼为最佳答案   

  1. 1,先not
  2. (not 1) or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9

  3. 2,然后and
  4. (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8) and 9

  5. 3,还有一个and
  6. (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or ((7 and 8) and 9)

  7. 4,最后顺序or
复制代码


2017-08-03_102723.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 11:29:13 | 显示全部楼层

lambda是什么运算?
好多运算符看不懂~~太菜了。。。要慢慢深入学习才知道。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 11:30:47 | 显示全部楼层
sunnychou 发表于 2017-8-3 08:59
我们来分析一下,not 1 or 0 and 1 or 3 and 4
0  or  0  = 0  then
0 and 1 = 0 then

也就是说,4后面的6,9都被短路掉了?
这就是所谓的短路逻辑了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 14:48:42 | 显示全部楼层
老笨啊 发表于 2017-8-3 11:30
也就是说,4后面的6,9都被短路掉了?
这就是所谓的短路逻辑了?

先按优先级,然后or这种操作就是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 05:47:07 | 显示全部楼层
sunnychou 发表于 2017-8-3 14:48
先按优先级,然后or这种操作就是这样

没搞懂~~什么叫先按优先级,然后or?
or 的优先级比and低,and又比not低,计算的时候,应该按照优先级最高的先计算,然后逐次降低其优先级来计算吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 08:32:55 | 显示全部楼层
老笨啊 发表于 2017-8-4 05:47
没搞懂~~什么叫先按优先级,然后or?
or 的优先级比and低,and又比not低,计算的时候,应该按照优先级最 ...

是的,就和加减乘除一样,优先级高的先计算,低的在计算,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 11:42:13 | 显示全部楼层
sunnychou 发表于 2017-8-4 08:32
是的,就和加减乘除一样,优先级高的先计算,低的在计算,

好的,多谢了~~^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 05:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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