首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模运算与按位运算

模运算与按位运算
EN

Stack Overflow用户
提问于 2012-09-10 13:03:25
回答 2查看 330关注 0票数 1

以下哪种方法更有效(在Scheme中,但我猜这无关紧要)?

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

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

(对于那些不熟悉Scheme的人。

代码语言:javascript
复制
int lsb (int n)
{
    return n % 2;
}

vs

代码语言:javascript
复制
int lsb (int n)
{
    return n - (n & (n - 1));
}

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-01-01 12:12:29

如果DIV在新的CPU中变得更有效率,那么它肯定不会比如此逐位的操作更快-而且在大多数架构上,可能会把剩余部分打乱(这意味着div指令)。

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

代码语言:javascript
复制
(define (lsb n)
   (bitwise-and 1 n))
票数 0
EN

Stack Overflow用户

发布于 2013-08-24 23:06:01

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

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

第一个:

代码语言:javascript
复制
return n & 1;

第二个:

代码语言:javascript
复制
return n & -n;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12345587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档