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
异常