You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中实现无符号右移(>>>)操作?

如何在Rust中实现JavaScript的无符号右移(>>>)效果

无符号右移的效果是将操作数的二进制位整体向右移动指定位数,左侧空出的位统一补0,不会保留原数的符号位,结果始终为非负整数。

核心实现逻辑

Rust中对无符号类型的右移运算符>>本身就是无符号右移行为,对有符号类型的右移则是保留符号位的算术右移。因此要实现和JavaScript一致的无符号右移,只需要先将有符号操作数转为对应位宽的无符号类型,再执行右移操作即可。

注意:JavaScript中的移位操作会先将操作数转换为32位整数再计算,要完全对齐JS行为,建议统一使用32位类型做转换。

代码示例

基础实现(对齐JS默认32位行为)

// 模拟JavaScript的>>>运算符
fn unsigned_right_shift(x: i32, n: u32) -> u32 {
    // 先转为无符号32位整数,再执行右移
    x as u32 >> n
}

测试用例

和JavaScript运行结果完全对齐:

  • JS中5 >>> 2返回1,对应Rust实现:
    assert_eq!(unsigned_right_shift(5, 2), 1);
  • JS中-1 >>> 0返回4294967295,对应Rust实现:
    assert_eq!(unsigned_right_shift(-1, 0), 4294967295);
  • JS中-5 >>> 2返回1073741822,对应Rust实现:
    assert_eq!(unsigned_right_shift(-5, 2), 1073741822);

其他位宽适配

如果需要处理64位等其他位宽的数值,对应转换为同宽度的无符号类型即可:

// 64位无符号右移
fn unsigned_right_shift_64(x: i64, n: u32) -> u64 {
    x as u64 >> n
}

内容的提问来源于stack exchange,提问作者Nazar Kalytiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:06