最少两个数字的最快方法

时间:2012-09-02 09:34:59

标签: performance boolean-operations

我正在阅读与性能工程相关的mit的开放式课件。

用于找到两个数字(例如x和y)的最小值的最快方法(需要最少数量的时钟周期)表示为:

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

表达式x的输出&lt; y可以是0或1(假设使用C),然后变为-0或-1。我知道xor可以用来交换两个数字。

问题: 1.就二进制而言,-0与0和-1有什么不同? 2.结果如何与和运算符一起使用以获得最小值?

提前致谢。

1 个答案:

答案 0 :(得分: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

因此min将是最小值。