Java的BigInteger类支持任意精度整数运算,需通过字符串、字节数组或valueOf()创建;运算返回新对象,比较用equals()和compareTo(),转换需防溢出。
Java 提供了 BigInteger 类来处理任意精度的整数,完全绕过 long 的上限(±9,223,372,036,854,775,807),适用于密码学、高精度计算、超大阶乘等场景。
不能直接用字面量或基本类型赋值,必须通过构造方法或静态工厂方法初始化:
BigInteger big = new BigInteger("123456789012345678901234567890");
BigInteger big = new BigInteger(new byte[]{(byte)0xFF, (byte)0x00});
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
向基本类型转换需谨慎,可能丢失精度或抛出异常:
a.intValueExact()、a.longValueExact()(超出范围时抛 ArithmeticException)a.toString()(默认十进制)或 a.toString(16)(十六进制)a.toByteArray()(补码形式,高位在前)不复杂但容易忽略