我想知道如何组合逻辑运算符是多么昂贵?结合它们的最佳方式是什么?结合逻辑运算符C
例如: 以下两条语句在优化方面有什么区别?
1) if((!x || !y || !z) && (a != b))
2) if(!(x && y && z) && (a != b))
我听到同行说你应该比ORing操作更频繁地使用AND操作。我是C语言的新手。请有人帮我理解这一点。任何材料或链接也会有所帮助。
我想知道如何组合逻辑运算符是多么昂贵?结合它们的最佳方式是什么?结合逻辑运算符C
例如: 以下两条语句在优化方面有什么区别?
1) if((!x || !y || !z) && (a != b))
2) if(!(x && y && z) && (a != b))
我听到同行说你应该比ORing操作更频繁地使用AND操作。我是C语言的新手。请有人帮我理解这一点。任何材料或链接也会有所帮助。
只需将其留给编译器即可。这在优化这些东西时可能更有效率。 – alk
根据德摩根定律,它们是相同的。 – haccks
请注意C语言中用于评估条件表达式的[短路]规则(https://en.wikipedia.org/wiki/Short-circuit_evaluation)。如果可以在不评估其他表达式的情况下知道整个条件语句,则它们是跳过。所以要小心你可能会发生的任何副作用,但不要(可能是值改变或函数调用)。直接的答案是以最简单明了的方式写出条件:明年你会看到它。 –