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