在 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
如你所见,指令数量相同。
我想知道组合逻辑运算符的成本是多少?结合它们的最佳方法是什么?
例如: 以下两个语句在优化方面有什么区别?
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
如你所见,指令数量相同。