我已经使用 Rust 一段时间了,并决定是时候从宏开始了。我想创建一个宏,允许对无符号整数变量的特定位进行按位与运算。这是我目前正在运行的内容:
macro_rules! AND {
($($val:ident.$bit:literal), *) => {
{
let mut val_out = 0x01;
$(
val_out &= ($val >> $bit);
)*
val_out & 0x01
}
};
}
fn main() {
let x = 0x01;
let y = 0x02;
let z = 0x10;
println!("{}", AND!(x.0, y.1, z.4)); // Prints 1
println!("{}", AND!(x.0, y.1, z.0)); // Prints 0
}
Run Code Online (Sandbox Code Playgroud)
我想做的也是允许否定运算符。这就是我编译的内容,但我不知道如何确定感叹号是否匹配。
macro_rules! AND {
($($(!)?$val:ident.$bit:literal), *) => {
{
let mut val_out = 0x01;
$(
val_out &= ($val >> $bit);
)* …Run Code Online (Sandbox Code Playgroud)