我目前正在 Rust 中开发 CPU 模拟器,并希望确保我的代码遵循最佳实践(或尽可能接近最佳实践)。我正在实现 ADDC() 函数,该函数使用进位标志进行添加。
目前我的标志寄存器是连续 4 个布尔值,作为下面找到的结构。
struct FlagsRegister {
zero: bool,
subtract: bool,
half_carry: bool,
carry: bool,
}
然后根据规范将其转换为 8 位布尔值以及从 8 位布尔值转换为单个 8 位数字。
我当前的 ADDC 代码是:
fn addc(&mut self, value: u8) -> u8 {
let (new_value, did_overflow) = self.registers.a.overflowing_add(value + self.registers.f.carry);
self.registers.f.zero = new_value == 0;
self.registers.f.subtract = false;
self.registers.f.carry = did_overflow;
self.registers.f.half_carry = (self.registers.a & 0xF) + (value & 0xF) > 0xF;
new_value
}
关键行是第一个带有 let 值的行,其余的只是标志操作。它给出了错误 can't add bool to u8 。 Rust中从布尔值中提取实际数值的正确方法是什么?
会是mem::transmute吗?或者其他什么?
我其实是一个布偶,只是为了使用
作为u8。
谢谢卡米尔库克