最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何使用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.ZERO、BigInteger.ONE、BigInteger.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() == 0或a.equals(BigInteger.ZERO) - 是否为正:
a.signum() > 0
转换与输出
向基本类型转换需谨慎,可能丢失精度或抛出异常:
- 转为 int/long:
a.intValueExact()、a.longValueExact()(超出范围时抛ArithmeticException) - 转为字符串:
a.toString()(默认十进制)或a.toString(16)(十六进制) - 转为字节数组:
a.toByteArray()(补码形式,高位在前) - 从字符串解析时注意:支持带符号(如 "-123"),但不支持逗号、空格等分隔符
不复杂但容易忽略
相关文章
- 最强祖师凤里栖本命原胚类型指南 06-20
- 最强祖师韩立本命原胚种类推荐 06-20
- 最强祖师阿璃本命原胚种类及配方选择 06-20
- 微信上怎么修改微信号 06-20
- 钉钉 AI 开发者场景说明:API 调用、工作流与自定义应用 06-20
- 织梦冒险团村庄介绍 06-20