对于多个布尔值评估,使用&&比||更有效?

cta*_*kul 7 c++

假设我们要评估(A || B || C) 其逻辑上等于的布尔值!(!A && !B && !C).

!(!A && !B && !C)如果(!A)是假的,因为整个表达式值变为假,它是否比其他使用更节省时间?该计划会注意到吗?或者程序仍然需要在返回最终结果之前评估(!B)和(!C)的值?

PS只是纠正de'Morgan的表达并~改为!.多谢你们.

在所示PS2 这个环节退休忍者优化版本,大卫·福斯特.汇编代码实际上是一样的!

pkp*_*pnd 10

(A || B || C)在逻辑上等于!(!A && !B && !C),你错过了内在!的.在第二个表达式的短路发生时!Afalse,或者等效地当Atrue.但是,当Atrue时,第一表达也短路.换句话说,这两个表达式在短路方面表现相同.

正如退休忍者在评论中提到的那样,这两个表达式产生相同的汇编代码,因此它们之间没有任何区别,除了一个更难阅读.