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

如何使用math/big对bigInt取模?DivMod调用参数与返回值疑问

问题解决及代码修正

1. DivMod第三个参数的作用

big.Int.DivMod 的方法签名是:

func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)

参数说明:

  • z:用于存储商的结果(如果不需要商,可以传 nil,或者一个临时的 big.Int 实例)
  • x:被除数
  • y:除数
  • m:用于存储余数的结果,必须传入一个 *big.Int(比如 new(big.Int))

方法返回的两个值就是传入的 z 和 m,相当于把计算结果赋值给这两个参数后再返回。

2. 只需要取模结果的简化写法

如果仅需要余数,没必要用DivMod,直接用big.Int.Mod方法更简洁,签名是:

func (z *Int) Mod(x, y *Int) *Int

它直接返回x % y的结果,存储在z中。

3. 代码修正

原代码存在三个问题:缺少DivMod的第三个参数、错误变量err未定义(DivMod不会返回错误,除数为0会直接panic)、big.Int不能用/运算符(必须调用Div方法)。

修正后的两种写法:

方式一:用DivMod(适合需要保留商的场景,此处忽略商)

// 用nil占位接收商,第三个参数传入新的big.Int存储余数
_, m := new(big.Int).DivMod(big.NewInt(100), big.NewInt(1024), new(big.Int))
// 调用Div方法计算m除以8
bytePos := new(big.Int).Div(m, big.NewInt(8))

方式二:用Mod(更适合仅需余数的场景)

// 直接计算100%1024的余数
m := new(big.Int).Mod(big.NewInt(100), big.NewInt(1024))
// 调用Div方法计算m除以8
bytePos := new(big.Int).Div(m, big.NewInt(8))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:36:30