1

我正在浏览麻省理工学院与性能工程相关的开放课件。

找到两个数字(比如 x 和 y)中的最小值的最快方法(需要最少的时钟周期数)如下所示:

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

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

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

提前致谢。

4

1 回答 1

0

-假=0,-真=-1=255d=11111111b。见这里
如果 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 将是实际的最小值。

于 2012-09-02T09:43:35.897 回答