运算符优先级问题

Beinggeeks 2015-03-06 12:18:55
①if (mgl > 2 || mgr > 2 || mgml > 2 || mgmr > 2) 与
②if ((mgl > 2 || mgr > 2) ||(mgml > 2 || mgmr > 2))
的区别?
我没看出什么区别
为什么用第①个编译有错误,第②个就正确。
参考:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-03-06
  • 打赏
  • 举报
回复
你的两条语句从结果来说是一样的 第一种是没错的,大于号的优先级是比|| 高的
paschen 2015-03-06
  • 打赏
  • 举报
回复
加了括号会改变判断的顺序,有些时个可以提高效率 比如: a || b, 如果表达式a是真,那么就不会再去执行表达式b 另外你的第一条也是可以的,没看出什么错误,你编译的错误是什么
Beinggeeks 2015-03-06
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
搜“逻辑短路”
一直觉得赵老师是个大水B,但关键时候,还是能够说道点子上去
Beinggeeks 2015-03-06
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
加了括号会改变判断的顺序,有些时个可以提高效率 比如: a || b, 如果表达式a是真,那么就不会再去执行表达式b 另外你的第一条也是可以的,没看出什么错误,你编译的错误是什么
编译结果显示期望获得一个表达式
一根烂笔头 2015-03-06
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
[quote=引用 3 楼 my_live_123 的回复:] 最短路径: A || B -当A为真时,B不再测试真假;只有当A假时,继续测试B; 不用你的实例了,抽象一下: 1-A || B ||C || D 2 -(A || B) || (C || D) 区别是 第2中情况比第1中情况运算的要多 A = 1,BCD任意, 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的
不对 对于第一种情况 需要求值 第一个 || 和 第二个 || 和第三个 || 对于第二种情况 只需要求值 第一个 || 和 第二个|| 就能得出结果了[/quote] 是的,我想错了!谢谢指正
赵4老师 2015-03-06
  • 打赏
  • 举报
回复
搜“逻辑短路”
赵4老师 2015-03-06
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
lin5161678 2015-03-06
  • 打赏
  • 举报
回复
引用 3 楼 my_live_123 的回复:
最短路径: A || B -当A为真时,B不再测试真假;只有当A假时,继续测试B; 不用你的实例了,抽象一下: 1-A || B ||C || D 2 -(A || B) || (C || D) 区别是 第2中情况比第1中情况运算的要多 A = 1,BCD任意, 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的
不对 对于第一种情况 需要求值 第一个 || 和 第二个 || 和第三个 || 对于第二种情况 只需要求值 第一个 || 和 第二个|| 就能得出结果了
一根烂笔头 2015-03-06
  • 打赏
  • 举报
回复
最短路径: A || B -当A为真时,B不再测试真假;只有当A假时,继续测试B; 不用你的实例了,抽象一下: 1-A || B ||C || D 2 -(A || B) || (C || D) 区别是 第2中情况比第1中情况运算的要多 A = 1,BCD任意, 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧