【发布时间】:2014-12-28 06:43:39
【问题描述】:
我正在阅读这个问题 Why is it faster to process a sorted array than an unsorted array? 和提供的最佳答案 神秘的。答案很好地解释了正在发生的事情和原因,并且还这么说:
那么有什么办法呢?
如果编译器无法将分支优化为条件 移动,如果您愿意牺牲,可以尝试一些技巧 性能的可读性。
替换:
if (data[c] >= 128)
sum += data[c];
与:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
这消除了分支并用一些位替换它 操作。
这段代码到底在做什么,为什么它是等价的?
【问题讨论】:
标签: c if-statement bitwise-operators branch-prediction