如何正确给无括号的条件表达式添加括号?
如何给优先级模糊的逻辑条件表达式添加括号?
嘿,这个问题的核心是搞清楚逻辑运算符的优先级规则——在绝大多数主流编程语言(比如C、Java、JavaScript、C#等)里,逻辑与&&的优先级是高于逻辑或||的。所以我们要先把所有由&&连接的条件单元用括号括起来,再处理||的部分。
先看你的原表达式:
if( c_1 && c_2 || c_3 || c_4 && c_5 || c_6 && c_7 || c_8 || c_9 && c_10)
第一步:识别高优先级的&&组合
我们先把每一组由&&连接的条件单独括起来:
c_1 && c_2→(c_1 && c_2)c_4 && c_5→(c_4 && c_5)c_6 && c_7→(c_6 && c_7)c_9 && c_10→(c_9 && c_10)
第二步:组合成符合优先级的表达式
把这些括号后的单元和原本的单条件用||连接,就得到了符合语法优先级的正确表达式:
if( (c_1 && c_2) || c_3 || (c_4 && c_5) || (c_6 && c_7) || c_8 || (c_9 && c_10) )
可选:为可读性额外添加括号
如果是为了团队协作时的可读性(避免有人记错优先级),也可以给每个||的分支都加上括号,哪怕是单条件:
if( (c_1 && c_2) || (c_3) || (c_4 && c_5) || (c_6 && c_7) || (c_8) || (c_9 && c_10) )
这种写法虽然冗余,但逻辑结构一目了然,完全不会有歧义。
需要注意的是,这个优先级规则适用于绝大多数支持C风格逻辑运算符的语言,哪怕是像Python这样用and/or替代&&/||的语言,优先级逻辑也是一致的(and高于or)。
内容的提问来源于stack exchange,提问作者T.Todua
相关产品推荐
相关产品推荐

