我正在尝试将 Rust 中的十进制 i32 转换为我可以操作的二进制表示形式,我从这个问题中了解到,我可以在二进制格式之间打印和声明 i32 值;但我正在尝试使用逻辑运算符实现二进制除法(而不是仅使用标准 i32 数学运算符,这是针对 leetcode 问题)并且我对 Rust 语法不够熟悉,无法理解如何使用i32 实现的二进制特征,或者是否有我应该使用的专用二进制类型或迭代器。
在写这个问题时,我能够通过使用 String 类型找到一个可行的解决方案,如下所示:
fn main() {
let a : i32 = 5;
let bin_a = String::from(format!("{a:b}"));
let bin_s = String::from("101");
assert_eq!(bin_a, bin_s);
}
Run Code Online (Sandbox Code Playgroud)
但这感觉很笨拙,就像可能有一种更直接的方法来迭代数字的二进制表示形式,所以我将提交这个问题,希望更有知识的人能够做出贡献;预先感谢您的任何帮助。
基本操作:
(x >> n) & 1给你第nth 位,x & !(1 << n)清除第nth 位,x | (1 << n)设置第nth 位。因此,迭代数字就像(0..32).map (|n| (x >> n) & 1)从最低有效位到最高有效位或(0..32).rev().map (|n| (x >> n) & 1)从最高有效位到最低有效位一样简单。