【发布时间】:2022-01-09 16:33:10
【问题描述】:
如何使无符号右移(>>>)生锈? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift
【问题讨论】:
标签: rust webassembly wasm-bindgen
如何使无符号右移(>>>)生锈? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift
【问题讨论】:
标签: rust webassembly wasm-bindgen
对于正数,您只需使用移位运算符>>。
但是,对于负数,我假设您处理的是i32。您链接的文档中的行为将负数的二进制表示向右移动。因此,我们首先需要将负整数重新解释为无符号整数。最安全的做法是使用to_be_bytes 和from_be_bytes。
fn main() {
let a: u32 = 5;
let b: u32 = 2;
let c: i32 = -5;
let c_as_u32: u32 = {
let bytes = c.to_be_bytes();
u32::from_be_bytes(bytes)
};
let x = a >> b;
let y = c_as_u32 >> b;
println!("x = {}", x); // x = 1
println!("y = {}", y); // x = 1073741822
}
【讨论】:
c as u32有什么问题?我的印象是这在 Rust 中具有明确定义的行为。