【发布时间】:2014-05-29 15:55:46
【问题描述】:
我可以替换下面的 IF 语句:
if(condition){
x += y;
}
与:
x = x + ((y - x) * (condition));
删除分支。
有没有办法避免上面的乘法并用按位操作来代替它以使其更快?
【问题讨论】:
-
等等,这似乎不对。不应该是
x + (y * (condition))吗? -
大多数现代处理器提供无分支条件赋值。确保你衡量你最终得到的任何“优化”,以确保你没有放慢速度。
-
@harold 你是对的。操作码相当于
if(condition){ x = y }; -
@harold:顺便说一句,它应该是
x + (y * !!(condition)),将条件(算术)表达式(如果是这样的话)转换为逻辑1或0 -
在 2 的赞美机器上,您可以
&和-condition。但是这种优化对于一个体面的编译器是没有意义的(除了混淆),而且实际上可能会使事情变得更糟。
标签: c++ c performance optimization bit-manipulation