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

Rust中获取商和余数的DIVMOD相关实现方法是什么?

问题

x86以及绝大多数常见架构都支持通过单条DIV指令同时计算出除法的商和余数,因此很多编程语言都提供了DIVMOD组合操作,比如C#中的DIVREM、Python中的DIVMOD,还有C语言中的div和div_t。请问在Rust中如何实现相同的功能?

是否存在优化方法可以同时执行如下操作:

let res = (a / b, a % b);
解答
  • Rust 1.73及以上版本的标准库原生方案
    标准库已经为所有基础整数类型(i8/u8/i32/u32/i64/u64/isize/usize等)内置了div_rem方法,直接返回商和余数组成的元组,语义清晰,编译器会直接生成最优的单指令实现,不需要额外优化:

    let a = 10i32;
    let b = 3;
    let (quotient, remainder) = a.div_rem(b);
    // 结果为 quotient = 3,remainder = 1,和手动计算a/b、a%b的规则完全一致
    

    如果你需要欧几里得除法规则(商向负无穷取整,余数始终为非负数),可以调用同版本新增的div_rem_euclid方法。

  • 旧版本Rust的方案
    如果你使用的是1.73以下的旧版本Rust,也不需要手动做特殊优化:你给出的(a / b, a % b)写法在开启编译器优化(release模式默认开启)时,LLVM后端会自动识别这种同时计算商和余数的模式,合并为单条DIV指令执行,性能和专用的divmod接口没有任何差异。
    如果想要更清晰的语义,也可以引入第三方数值库num,使用其中的DivRem trait,引入后所有数值类型都可以直接调用div_rem方法。

所有上述方法的行为都和Rust原生的除法、取余规则一致,除数为0时会触发panic,溢出场景的处理也遵循Rust的默认配置。

内容的提问来源于stack exchange,提问作者Evan Carroll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:03