有没有办法在 Rust 中拥有可变大小的 int 和无符号整数类型?

Fab*_*enM 5 math integer fpga rust

在 Rust 中,标准整数类型的大小为8、16、32、64、128 位。但是是否可以操作具有非标准大小的整数类型,例如u24, i7, ... ?

这些非标准尺寸对于 FPGA 算法仿真很有用。

occ*_*lti 3

Rust 本身并不支持任意大小的整数类型(例如其标准库u24i7作为其标准库的一部分)。但是,您可以使用现有的整数类型和仔细的操作来模拟此类类型,以确保仅使用相关位。例如,您可以通过确保仅使用低 24 位来使用au32来表示 a 。u24

下面是如何在 Rust 中定义和使用u24类型的示例:

struct U24(u32);

impl U24 {
    fn new(value: u32) -> Self {
        U24(value & 0x00FF_FFFF)
    }

    fn get(&self) -> u32 {
        self.0
    }

    // Add other methods as needed, ensuring that you mask the upper bits as appropriate.
}

fn main() {
    let a = U24::new(0x123456);
    let b = U24::new(0x654321);

    // Example operation: addition
    let sum = U24::new(a.get() + b.get());
    println!("Sum: {:X}", sum.get());
}
Run Code Online (Sandbox Code Playgroud)

对于复杂或性能关键的应用程序,您可能需要研究类似的包,bitvec它允许对各个位进行更直接的控制,并可用于模拟任意位长度的整数。

尝试这里的代码