我正在阅读与性能工程相关的mit的开放式课件。
用于找到两个数字(例如x和y)的最小值的最快方法(需要最少数量的时钟周期)表示为:
min= y^((x^y) & -(x<y))
表达式x的输出&lt; y可以是0或1(假设使用C),然后变为-0或-1。我知道xor可以用来交换两个数字。
问题: 1.就二进制而言,-0与0和-1有什么不同? 2.结果如何与和运算符一起使用以获得最小值?
提前致谢。
答案 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将是最小值。