2012-09-02 58 views
1

我正在通過與性能工程相關的mit的opencourseware。最少兩個數字的最快方法

的最快方法(需要至少時鐘週期的數目)用於找到最小兩個數(例如x和y)的被表述爲:

min= y^((x^y) & -(x<y)) 

表達式x <的輸出y可以是0或者1(假設正在使用C),然後變爲-0或-1。我知道xor可以用來交換兩個數字。

問題: 1.在二進制方面-0與0和-1有什麼不同? 2.與運算符一起使用的結果如何得到最小值?

在此先感謝。

回答

0

-false = 0,-true = -1 = 255d = 11111111b。見here
如果x> y,則線將是:

min=y^((x^y) & -false)=y^(x^y & 0)=y^0=y 

而如果y> x中的線將是:

min=y^((x^y) & -true)=y^(x^y & 11111111)=y^(x^y)=x 

因此分鐘將是實際工作最小。