首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地为锈蚀中的u64整数求下2的幂?

如何有效地为锈蚀中的u64整数求下2的幂?
EN

Stack Overflow用户
提问于 2021-02-18 05:00:06
回答 1查看 812关注 0票数 1

我正在寻找一种快速的方法,以找到下一个二次方的64位整数在锈蚀。例如,如果我有23,则结果必须是32。我试过这个代码:

代码语言:javascript
复制
fn ceil_pow2(x: u64) -> u64 {
    let mut y: u64 = x;
    let mut z: u64 = 1;
    while y > 0 {
        y >>= 1;
        z <<= 1;
    }
    if z == 2 * x {
        z >>= 1;
    }
    z
}

如果给出了正确的结果,但是代码看起来并不有效,我相信有一个更快的实现方法。有人能帮忙吗?锈蚀函数中的Asm代码如果能获得性能,就会受到欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-18 05:05:45

此函数已以u64::next_power_of_two形式存在于标准库中。

返回大于或等于self的最小幂。

代码语言:javascript
复制
fn ceil_pow2(x: u64) -> u64 {
    x.next_power_of_two()
}

如果您好奇的话,它当前的实现大致相当于:

代码语言:javascript
复制
fn next_power_of_two(n: u64) -> u64 {
    if n <= 1 {
        1
    } else {
        (u64::MAX >> (n - 1).leading_zeros()) + 1
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66253909

复制
相关文章

相似问题

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