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

问题描述

我有一个u16,用于保存9位的位掩码,我想找出它包含多少个1

found algorithm

enter image description here

我不知道它是如何工作或为什么工作:

/* 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 */
}

如何将其转换为Rust函数?这是我尝试过的但不起作用:

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
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)