首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将计算9位位掩码中的数的C函数转换为Rust?

如何将计算9位位掩码中的数的C函数转换为Rust?
EN

Stack Overflow用户
提问于 2020-09-22 20:34:30
回答 1查看 59关注 0票数 0

我有一个u16,我用它来保存一个9位的位掩码,我想知道它包含了多少1

找到这个算法,我不知道它是如何或为什么工作的:

代码语言:javascript
复制
/* count number of 1's in 9-bit argument (Schroeppel) */
unsigned count_ones(unsigned36 a) {
  return ((a * 01001001001)     /* 4 adjacent copies */
             & 042104210421)    /* every 4th bit */
             % 15;              /* casting out 15.'s in hexadecimal */
}

我怎么才能把它变成锈蚀函数呢?这就是我试过但不起作用的地方:

代码语言:javascript
复制
fn main() {
    let a: u16 = 0b101_100_000;
    println!("Ones in {:b}: {}", a, num_of_ones(a));
}

fn num_of_ones(quantity: u16) -> u8 {
    (((quantity as u64 * 01_001_001_001) & 042_104_210_421) % 15) as u8
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 20:41:34

C 表示八进制文字中的前导零点。锈蚀八进制以0o开头,就像您已经使用的0b

代码语言:javascript
复制
(((quantity as u64 * 0o01_001_001_001) & 0o042_104_210_421) % 15) as u8

但是,不需要这个,因为它是内置的,例如u16::count_ones

代码语言:javascript
复制
println!("Ones in {:b}: {}", a, a.count_ones());

另请参阅:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64017310

复制
相关文章

相似问题

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