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