bigInteger
约 380 字大约 1 分钟
2024-08-08
在 Java 中,由 CPU 原生提供的整型最大范围是 64 位 long 型整数。使用 long 型整数可以直接通过 CPU 指令进行计算,速度非常快
我们使用的整数范围超过了 long 型的时候,就只能用软件来模拟一个大整数。java.math.BigInteger 就是用来表示任意大小的整数。BigInteger 内部用一个 int[] 数组来模拟一个非常大的整数
public static void main(String[] args) {
BigInteger bi = new BigInteger("1234567890");
// bi * bi,1524157875019052100
System.out.println(bi.pow(2));
}运算
和 long 型整数运算比,BigInteger 不会有范围限制,但缺点是速度比较慢
对 BigInteger 做运算的时候,只能使用实例方法,例如,加法运算
public static void main(String[] args) {
BigInteger i1 = new BigInteger("1234567890");
BigInteger i2 = new BigInteger("12345678901234567890");
BigInteger sum = i1.add(i2); // 12345678902469135780
}转换
BigInteger 和 Integer、Long 一样,也是不可变类,并且也继承自 Number 类。因为 Number 定义了转换为基本类型的几个方法
转换为
byte:byteValue()转换为
short:shortValue()转换为
int:intValue()转换为
long:longValue()转换为
float:floatValue()转换为
double:doubleValue()
通过上述方法,可以把 BigInteger 转换成基本类型。如果 BigInteger 表示的范围超过了基本类型的范围,转换时将丢失高位信息,即结果不一定是准确的。如果需要准确地转换成基本类型,可以使用 intValueExact()、longValueExact() 等方法,在转换时如果超出范围,将直接抛出 ArithmeticException 异常