一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何使用Java原生大数类处理超出长整型范围的超大整数

时间:2026-06-20 11:17:58 编辑:袖梨 来源:一聚教程网

Java的BigInteger类支持任意精度整数运算,需通过字符串、字节数组或valueOf()创建;运算返回新对象,比较用equals()和compareTo(),转换需防溢出。

Java 提供了 BigInteger 类来处理任意精度的整数,完全绕过 long 的上限(±9,223,372,036,854,775,807),适用于密码学、高精度计算、超大阶乘等场景。

创建 BigInteger 实例

不能直接用字面量或基本类型赋值,必须通过构造方法或静态工厂方法初始化:

  • 从字符串创建(最常用,避免溢出):
    BigInteger big = new BigInteger("123456789012345678901234567890");
  • 从字节数组(适合二进制序列还原):
    BigInteger big = new BigInteger(new byte[]{(byte)0xFF, (byte)0x00});
  • 从 long 值转换(仅当值在 long 范围内):
    BigInteger big = BigInteger.valueOf(123L);(推荐,比 new 更高效)
  • 获取常量:
    BigInteger.ZEROBigInteger.ONEBigInteger.TEN

基本算术运算

所有运算都返回新对象(不可变),不修改原值:

  • 加法:a.add(b)
  • 减法:a.subtract(b)
  • 乘法:a.multiply(b)
  • 除法(截断除):a.divide(b)(要求 b ≠ 0)
  • 取余:a.remainder(b)a.mod(b)mod 要求 b > 0,结果非负)
  • 幂运算:a.pow(n)(n 为非负 int)

例如计算 2¹⁰⁰:BigInteger.valueOf(2).pow(100)

立即学习“Java免费学习笔记(深入)”;

比较与判断

不能用 ==> 等操作符,必须调用方法:

  • 相等判断:a.equals(b)(注意不是 ==
  • 大小比较:a.compareTo(b) 返回 -1/0/1,对应小于/等于/大于
  • 是否为零:a.signum() == 0a.equals(BigInteger.ZERO)
  • 是否为正:a.signum() > 0

转换与输出

向基本类型转换需谨慎,可能丢失精度或抛出异常:

  • 转为 int/long:a.intValueExact()a.longValueExact()(超出范围时抛 ArithmeticException
  • 转为字符串:a.toString()(默认十进制)或 a.toString(16)(十六进制)
  • 转为字节数组:a.toByteArray()(补码形式,高位在前)
  • 从字符串解析时注意:支持带符号(如 "-123"),但不支持逗号、空格等分隔符

不复杂但容易忽略

热门栏目