首页 > 编程笔记 > Java笔记 阅读:4

Java BigInteger类的用法(附带实例)

在 Java 中,BigInteger 类的数字范围较 Integer 类的数字范围要大得多。

我们知道,Integer 类是 int 的包装类,int 的最大值为 2^31-1,如果要计算更大的数字,使用 Integer 类就无法实现了,因此 Java 提供了 BigInteger 类来处理更大的数字。BigInteger 类支持任意精度的整数,也就是说,在运算中 BigInteger 类可以准确地表示任何大小的整数值而不会丢失信息。

在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。

使用 BigInteger 类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。

例如,将 2 转换为 BigInteger 类型,可以使用以下语句进行初始化操作:
BigInteger twoInstance = new BigInteger("2");
注意,参数 2 的双引号不能省略,因为参数是以字符串的形式存在的。

一旦创建了对象实例,就可以调用 BigInteger 类中的一些方法进行运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值等操作。

下面列举了 BigInteger 类中常用的几种运算方法:

方法 功能描述
public BigInteger add(BigInteger val) 做加法运算。
public BigInteger subtract(BigInteger val) 做减法运算。
public BigInteger multiply(BigInteger val) 做乘法运算。
public BigInteger divide(BigInteger val) 做除法运算。
public BigInteger remainder(BigInteger val) 做取余操作。
public BigInteger[] divideAndRemainder(BigInteger val) 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(int exponent) 进行取参数的exponent次方操作。
public BigInteger negate() 取相反数。
public BigInteger shiftLeft(int n) 将数字左移n位,如果n为负数,做右移操作。
public BigInteger shiftRight(int n) 将数字右移n位,如果n为负数,做左移操作。
public BigInteger and(BigInteger val) 做与操作。
public BigInteger or(BigInteger val) 做或操作。
public int compareTo(BigInteger val) 做数字比较操作。
public boolean equals(Object x) 当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回true。
public BigInteger min(BigInteger val) 返回较小的数值。
public BigInteger max(BigInteger val) 返回较大的数值。

【实例】使用 BigInteger 类进行数学运算。在项目中创建 BigIntegerDemo 类,然后在类的主方法中创建两个 BigInteger 类对象,再对两个对象进行加、减、乘、除和其他运算,最后输出运算结果。
import java.math.BigInteger;
public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger b1 = new BigInteger("987654321987654321"); // 第 1 个大数字
        BigInteger b2 = new BigInteger("123456789123456789"); // 第 2 个大数字
        System.out.println("加法操作:" + b1.add(b2)); // 加法运算
        System.out.println("减法操作:" + b1.subtract(b2)); // 减法运算
        System.out.println("乘法操作:" + b1.multiply(b2)); // 乘法运算
        System.out.println("除法操作:" + b1.divide(b2)); // 除法运算
        System.out.println("取商:" + b1.divideAndRemainder(b2)[0]); // 取商运算
        System.out.println("取余数:" + b1.divideAndRemainder(b2)[1]); // 取余运算
        System.out.println("做 2 次方操作:" + b1.pow(2)); // 2 次方运算
        System.out.println("取相反数操作:" + b1.negate()); // 相反数运算
    }
}
运行结果如下:

加法操作:1111111111111111110
减法操作:864197532864197532
乘法操作:121932631356500531347203169112635269
除法操作:8
取商:8
取余数:9000000009
做2次方操作:975461059740893157555403139789971041
取相反数操作:-987654321987654321

在本实例中需要注意的是,divideAndRemainder() 方法做除法操作,以数组的形式返回,数组中第一个值为做除法的商,第二个值为做除法的余数。

相关文章