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];
這消除了分公司,並與一些位 操作替換它。
這段代碼究竟做了什麼,它爲什麼等價呢?