1

パフォーマンス エンジニアリングに関連する mit のオープン コースウェアを調べていました。

2 つの数値 (x と y など) の最小値を見つけるための最も迅速な方法 (必要なクロック サイクル数が最小) は、次のように記述されています。

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

式 x < y の出力は 0 または 1 (C が使用されていると仮定) になり、その後 -0 または -1 に変化します。xor を使用して 2 つの数値を交換できることを理解しています。

質問: 1. 2 進法の観点から、-0 は 0 および -1 とどう違うのですか? 2. 最小値を取得するために、その結​​果を and 演算子でどのように使用しますか?

前もって感謝します。

4

1 に答える 1

0

-false=0、-true=-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 に答える