平时在存储整数的时候,Java中默认是int类型,int类型有取值范围:-2147483648 ~ 2147483647。如果数字过大,我们可以使用long类型,但是如果long类型也表示不下怎么办呢?
就需要用到BigInteger,可以理解为:大的整数。
有多大呢?理论上最大到42亿的21亿次方
基本上在内存撑爆之前,都无法达到这个上限。
以下是 BigInteger 的一些关键特点和用法:
1. 创建 BigInteger 对象
BigInteger 提供多种创建对象的方式:
-
通过字符串构造:
-
BigInteger bigInt = new BigInteger("123456789012345678901234567890");
通过基本数据类型构造:
-
BigInteger bigInt = BigInteger.valueOf(1234567890L);
基本算术运算
BigInteger 提供了丰富的算术运算方法,例如加法、减法、乘法、除法等:
-
加法
BigInteger a = new BigInteger("123");
BigInteger b = new BigInteger("456");
BigInteger result = a.add(b); // result: 579
减法:
BigInteger result = a.subtract(b);
乘法:
BigInteger result = a.multiply(b);
除法:
BigInteger result = a.divide(b);
取余:
BigInteger result = a.remainder(b);
3. 比较操作
BigInteger 提供了比较方法:
-
compareTo
方法:
int comparison = a.compareTo(b); // returns -1, 0, or 1
4. 位操作
BigInteger 也支持位操作,如与、或、异或、非等:
与操作:
BigInteger result = a.and(b);
或操作:
BigInteger result = a.or(b);
异或操作:
BigInteger result = a.xor(b);
非操作:
BigInteger result = a.not();
5. 其他常用方法
-
求幂:
-
BigInteger result = a.pow(2); // a 的平方
最大公约数:
-
BigInteger gcd = a.gcd(b);
是否为质数:
boolean isPrime = a.isProbablePrime(1); // 参数表示检验的准确性
使用场景
BigInteger 适用于需要处理超出基本数据类型范围的大整数运算的场景,如密码学、大数计算、金融计算等。它的使用确保了计算的准确性和范围的扩展。
以下是一个综合示例,展示了如何使用 BigInteger 进行各种操作
import java.math.BigInteger;
public class BigIntegerExample {
public static void main(String[] args) {
BigInteger a = new BigInteger("12345678901234567890");
BigInteger b = new BigInteger("98765432109876543210");
// 算术运算
BigInteger sum = a.add(b);
BigInteger difference = a.subtract(b);
BigInteger product = a.multiply(b);
BigInteger quotient = a.divide(b);
BigInteger remainder = a.remainder(b);
// 比较
int comparison = a.compareTo(b);
// 位操作
BigInteger andResult = a.and(b);
BigInteger orResult = a.or(b);
BigInteger xorResult = a.xor(b);
BigInteger notResult = a.not();
// 其他方法
BigInteger powResult = a.pow(2);
BigInteger gcdResult = a.gcd(b);
boolean isPrime = a.isProbablePrime(1);
// 转换
String strValue = a.toString();
int intValue = a.intValue();
long longValue = a.longValue();
System.out.println("Sum: " + sum);
System.out.println("Difference: " + difference);
System.out.println("Product: " + product);
System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);
System.out.println("Comparison: " + comparison);
System.out.println("AND result: " + andResult);
System.out.println("OR result: " + orResult);
System.out.println("XOR result: " + xorResult);
System.out.println("NOT result: " + notResult);
System.out.println("Power result: " + powResult);
System.out.println("GCD result: " + gcdResult);
System.out.println("Is prime: " + isPrime);
System.out.println("String value: " + strValue);
System.out.println("Int value: " + intValue);
System.out.println("Long value: " + longValue);
}
}