以下哪种方法更有效(在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));
}
谢谢!
以下哪种方法更有效(在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));
}
谢谢!
如果 DIV 在新的 CPU 中变得更高效,它肯定不会比按位运算更快,而且在大多数架构上,可能会从余数中剔除(这意味着 div 指令)
如果你只关心 lsb 为什么不这样写:
(define (lsb n)
(bitwise-and 1 n))
你写的问题不正确。您正在尝试比较不同功能的性能。例如,对于 n == 2,您的第一个函数返回零,而第二个返回 2。
所以,如果你想优化这两个功能,那么它们是:
第一个:
return n & 1;
第二:
return n & -n;