2014-10-31 5 views
0

나는이 질문 Why is it faster to process a sorted array than an unsorted array? 및 Mysticial가 제공하는 가장 좋은 대답을 읽고 있었다. 대답은 무슨 일이 일어나고 있는지, 왜 그런지에 대해 설명하는 훌륭한 일을합니다.왜 비트 연산자이 문 if 문이 동일하다?

그래서 무엇을 할 수 있습니까?

컴파일러가 분기를 조건부 으로 최적화 할 수없는 경우 성능을 위해 가독성을 희생하려는 경우 해킹을 시도 할 수 있습니다.

은 교체 :

if (data[c] >= 128) 
    sum += data[c]; 

로 :

int t = (data[c] - 128) >> 31; 
sum += ~t & data[c]; 

는이 지점을 제거하고 약간의 비트 작업으로 대체합니다.

정확히이 코드는 일을하고 왜 상응하는 무엇입니까?

답변

1

는 먼저 (128 이하 간 차감 여부) 값 and ED 첨가되고있는, 모두 0 또는 모두 1 중 확대되고 나서 128

결과의 부호와 감산 비교 변환 , 빼기 결과가 음수이면 제로 아웃합니다.