2014-10-31 59 views
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]; 

這消除了分公司,並與一些位 操作替換它。

這段代碼究竟做了什麼,它爲什麼等價呢?

回答

1

它首先轉換與128

然後結果的符號的比較,以減法(是否減去去下面128)被擴展成全零或全一,這是被添加and ED爲值如果減法結果爲負,則將其歸零。