1

次の方法のどれがより効率的ですか(Schemeでは、しかし私はそれは問題ではないと思います)?(目的は最下位ビットを取得することです)

(define (lsb n) (- n (bitwise-and n (- n 1))))

(define (lsb n) (remainder n 2))

(Schemeに詳しくない方のために。

int lsb (int n)
{
    return n % 2;
}

vs

int lsb (int n)
{
    return n - (n & (n - 1));
}

ありがとう!

4

2 に答える 2

0

新しいCPUでDIVがより効率的になった場合、ビット単位の操作よりも高速になることは確かにないため、ほとんどのアーキテクチャでは、おそらく残りの部分から靴下をノックアウトします(これは div 命令を意味します)

気にするのが lsb だけなら、次のように書いてみませんか。

(define (lsb n)
   (bitwise-and 1 n))
于 2013-01-01T04:12:28.723 に答える
0

あなたは間違った質問を書いています。さまざまな機能のパフォーマンスを比較しようとしています。たとえば、n == 2 の場合、1 番目の関数は 0 を返しますが、2 番目の関数は 2 を返します。

したがって、両方の機能を最適化する場合は、次のようになります。

1位:

return n & 1;

2番目:

return n & -n;
于 2013-08-24T15:06:01.323 に答える