为了账号安全,请及时绑定邮箱和手机立即绑定

在编程中 !(~A && ~B) 比 (A||B) 好吗?

在编程中 !(~A && ~B) 比 (A||B) 好吗?

茅侃侃 2023-05-10 17:09:52
我正在开发Java,我正在使用它IntelliJ作为我的 IDE。我写了一个if声明如下。if( list1.size() >= 1 || list2.contains(itemX) ) {    //do something}IntelliJ建议转换 ( DeMorgan's Law) 并将其转换为:if( ! ( list1.size() < 1 && !( list2.contains(itemX) ) ) ) {    //do something}所以它应用了一种非常普遍的离散数学理论来简化布尔表达式。我想知道的是这如何优化任何东西?||如果第一部分本身为真,运算符无论如何不会执行整个条件,并且仅当第一部分为假时才执行 RHS。转化后的条件是否有效?如何?
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这有点主观,但一个好的一般经验法则是尽可能多地消除复杂性。所谓复杂性,是指您需要执行多少操作才能获得所需的结果。

从这个意义上说,!a && !b这比!(a || b)因为在一种情况下你否定 a 和 b,然后执行 OR 和运算符导致 3 个操作,而在后一种情况下,你只执行 2 个操作。当然这是空洞的,当你'我们谈论的是两种情况,但是当你处理很多情况时,这会产生很大的不同。

但是在您的场景中,您的 IDE 更改它没有任何意义,因为后者的操作数量较少。可能是 IDE 试图拼命吸引你 :)

希望这是有道理的!


查看完整回答
反对 回复 2023-05-10
?
莫回无

TA贡献1865条经验 获得超7个赞

两者都是完全相同的陈述。

我同意如果第一部分为真,则 OR 运算符不会评估第二部分,但是,如果第一部分为假,AND 运算符也不会评估第二部分。

事实上,与 A||B 相比,评估 ~(~A && ~B) 将花费更多的时间和空间。

希望这可以帮助 :)


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信