求助逻辑与比逻辑或优先级的问题

fujing0103 2010-05-13 05:23:46
int a=0,b=5;
(a<b)||(a=b)&&(b=15);
执行后a=_____;b=_______;


结果为a=0;b=5;

请高手帮忙分析一下。为什么先算a<b呢?逻辑与比逻辑或优先级高啊!
...全文
411 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kensun0 2010-05-13
  • 打赏
  • 举报
回复
(a<b)||(a=b)&&(b=15);
&&优先级为11
||优先级为12
"与"优先级高,所以变成(a<b)||((a=b)&&(b=15)); 因为(a<b)为真,没进行后面计算。
zrcvic 2010-05-13
  • 打赏
  • 举报
回复
把这个式子拆分一下:
原式 := XXX || YYY // A
XXX := a < b
YYY := MMM && NNN
MMM := (a = b)
NNN := (b = 15)
优先级的意思是,虽然没有打括号,但是运算的时候就好像打了括号的。打完括号后,发现整个式子就是上面A式那样的了。
hewenkang 2010-05-13
  • 打赏
  • 举报
回复
(1) 先算括号内,(a<b)=1
(2) &&优先级比||高,所以这个表达式的值由||的左右两部分确定
(3) ||的运算法则是,如果左操作数为1,则不计算右操作数,结果为1。所以(a=b)、(b=15)两个赋值都没执行

所以a=0,b=5
zjs2010 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zrcvic 的回复:]
(a<b)||(a=b)&&(b=15),按照标准,应该先计算a < b,得到1(true)。然后由于短路求值的性质,||的右边通通不予计算,所以这句的意思就相当于(void)(a < b),根本不改变a和b的值。
[/Quote]
我错了。。
由& &与| |连接的表达式从左至右计算,并且一旦知道结果的真假值就立即停止计算
vanchristin 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caojengineer 的回复:]

||、&&优行级相同。从左到右开始,所以先算a<b
[/Quote]

&&优先级比||高吧?
短路法则,a<b 为真,表达式为真,不再计算后面的
zrcvic 2010-05-13
  • 打赏
  • 举报
回复
(a<b)||(a=b)&&(b=15),按照标准,应该先计算a < b,得到1(true)。然后由于短路求值的性质,||的右边通通不予计算,所以这句的意思就相当于(void)(a < b),根本不改变a和b的值。
zjs2010 2010-05-13
  • 打赏
  • 举报
回复
先括号的。。。。
__Jun__ 2010-05-13
  • 打赏
  • 举报
回复
||、&&优行级相同。从左到右开始,所以先算a<b

70,037

社区成员

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

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