0
我正在看这个问题Why is it faster to process a sorted array than an unsorted array?和最好的回答提供者 Mysticial。答案在解释发生了什么以及为什么,并且说这是一个很好的工作:为什么这个语句与按位运算符相同呢?
那么可以做些什么?
如果编译器无法将分支优化为条件 移动,如果您愿意牺牲 的可读性以提高性能,可以尝试一些黑客行为。
替换:
if (data[c] >= 128)
sum += data[c];
有:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
这消除了分公司,并与一些位 操作替换它。
这段代码究竟做了什么,它为什么等价呢?