我正在阅读这个问题为什么处理排序数组比处理未排序数组更快?以及 Mysticial 提供的最佳答案。答案很好地解释了正在发生的事情以及原因,并且还说:
那么可以做些什么呢?
如果编译器无法将分支优化为条件移动,如果您愿意牺牲可读性来换取性能,您可以尝试一些技巧。
代替:
if (data[c] >= 128)
sum += data[c];
和:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
这消除了分支并用一些按位操作替换它。
这段代码到底在做什么,为什么它是等价的?