modulo vs bitwise op

时间:2012-09-10 05:03:25

标签: scheme bit-manipulation modulo

以下哪种方法效率更高(在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));
}

谢谢!

2 个答案:

答案 0 :(得分:0)

如果DIV在新CPU中变得更有效率,它肯定不会比按位运算快得多 - 并且在大多数架构中可能会将其从剩余部分中敲出(这意味着div指令)

如果您关心的只是lsb,为什么不这样写:

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

答案 1 :(得分:0)

你写错了问题。您正在尝试比较不同功能的性能。例如,对于n == 2,当2nd返回2时,第1个函数返回零。

所以,如果你想要优化这两个函数,那么它们是:

第一

return n & 1;

第二

return n & -n;