2016-12-30 102 views
0

我想知道如何组合逻辑运算符是多么昂贵?结合它们的最佳方式是什么?结合逻辑运算符C

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

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

我听到同行说你应该比ORing操作更频繁地使用AND操作。我是C语言的新手。请有人帮我理解这一点。任何材料或链接也会有所帮助。

+1

只需将其留给编译器即可。这在优化这些东西时可能更有效率。 – alk

+1

根据德摩根定律,它们是相同的。 – haccks

+6

请注意C语言中用于评估条件表达式的[短路]规则(https://en.wikipedia.org/wiki/Short-circuit_evaluation)。如果可以在不评估其他表达式的情况下知道整个条件语句,则它们是跳过。所以要小心你可能会发生的任何副作用,但不要(可能是值改变或函数调用)。直接的答案是以最简单明了的方式写出条件:明年你会看到它。 –

回答

3

除非此代码位于代码的热路径极其,否则请始终选择对未来读者最符合逻辑的表单。

如果它在热路径中,则编译并查看程序集。一个很好的工具,它可以让你看到输出很多编译器和CPU是godbolt

下面是一个例子测试您的方案:fiddle

正如你所看到的,指令的数量相同。