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;
}

对比

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

谢谢!

4

2 回答 2

0

如果 DIV 在新的 CPU 中变得更高效,它肯定不会比按位运算更快,而且在大多数架构上,可能会从余数中剔除(这意味着 div 指令)

如果你只关心 lsb 为什么不这样写:

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

你写的问题不正确。您正在尝试比较不同功能的性能。例如,对于 n == 2,您的第一个函数返回零,而第二个返回 2。

所以,如果你想优化这两个功能,那么它们是:

第一个:

return n & 1;

第二:

return n & -n;
于 2013-08-24T15:06:01.323 回答