在 C 中组合逻辑运算符

Combine logical operators in C

我想知道组合逻辑运算符的成本是多少?结合它们的最佳方法是什么?

例如: 以下两个语句在优化方面有什么区别?

1) if((!x || !y || !z) && (a != b)) 
2) if(!( x && y && z) && (a != b))

我从同事那里听说,您应该更频繁地使用 ANDing 运算而不是 ORing 运算。我是C语言的新手。请有人帮助我理解这一点。任何 material 或 link 也会有所帮助。

它们是相同的,应该不会影响性能。根据 De Morgan's Law.

它们是等价的

除非此代码位于代码的极度 热路径中,否则始终选择对未来最合乎逻辑的形式reader。

如果它在热路径中,编译两者并查看程序集。 godbolt

是一个很好的工具,可以让您看到许多编译器和 CPU 的输出

下面是一个测试场景的示例:fiddle

如你所见,指令数量相同。