众所周知,在Java中存在四种关于整数的数据类型:
byte:占用1个字节 short:占用2个字节 int:占用4个字节 long:占用八个字节
问题来了:我现在想操作一个大于八个字节的数字 该怎么办呢?
于是我们引入了BigInteger,正如其名一样简单(大整数),事实上BigInterger是一种容器,其原理是使用多个数组来储存数据。讲到这里你可能会有疑惑,我们使用比喻的手法来讲解:
想象你有一块非常大的巧克力,这块巧克力很大,以至于无法用一个普通的盒子装下。为了能够储存和处理这块超大的巧克力,你需要一个特殊的储物柜,这个储物柜可以无限扩展,可以容纳任意大小的巧克力块。
在这个比喻中,巧克力就相当于普通的整数,而储物柜则相当于 BigInteger。普通的整数类型(如 int 或 long)就好比普通的盒子,只能装下有限大小的数字。而 BigInteger 就像是一个可以容纳任意大小整数的储物柜,它没有固定的大小限制,可以应对各种超大的数字。
在程序中,当我们需要处理非常大的整数时,就可以使用 BigInteger 类来创建、存储和进行各种运算操作。这样,我们就不会受到普通整数类型范围的限制,能够处理更大范围的整数数据。
我们将对BigInteger的学习分为两个部分:纯粹的数据操作部分+有运算符参与的部分
我们先来讲纯粹的数据操作部分,我们这里列举四种BigInteger的功能:
//在程序中,当我们需要处理非常大的整数时,就可以使用 BigInteger 类来创建、存储和进行各种运算操作。这样,我们就不会受到普通整数类型范围的限制,能够处理更大范围的整数数据。
//1.在0到(2pow4)-1中的范围 并且随机输出一个值 ->pow的次幂的意思
BigInteger bd1 = new BigInteger(4,new Random(1));
System.out.println("随机取整数"+bd1);
//2.获取一个指定的大整数
BigInteger bd2 = new BigInteger("99999999999999999");
System.out.println("获取一个指定大整数"+bd2);//用""中存数字相当于是拿BigInteger当一个大容器,
但是这个是一个只可以储存整数的大容器
//用来弥补long长度的不足 21亿
//3.获取指定进制数的大整数
//字符串一定是整数
//字符串的数字一定要和进制吻合 比如二进制只能写0和1 然后就会将这个数字输出成十进制的形式 可以理解成一个其他进制转化为十进制 的工具
BigInteger bd3 = new BigInteger("100",2);
System.out.println("获取指定进制的最大整数"+bd3);
//4.静态方法获取BigInterger的
//静态方法取值范围较小 只能在long范围之内
//从-16~16先创建好BigIntger的对象,如果多次获取不会创建新的。
BigInteger bd4 = BigInteger.valueOf(100);//这里最大只能存long类型
System.out.println("静态方法取"+bd4);
System.out.println("———————————验证BigInteger静态调用valueof准备好了-16-16———————————————");
BigInteger bd5 =BigInteger.valueOf(16);
BigInteger bd6 = BigInteger.valueOf(16);
System.out.println("检测16是不是相等"+(bd5==bd6));
BigInteger bd7 =BigInteger.valueOf(17);
BigInteger bd8 = BigInteger.valueOf(17);
System.out.println("检测17是不是相等"+(bd7==bd8));
———————————————————————————————————————————在讲解完了纯粹的数据操作,我们来着眼于关乎运算符的知识
BigInteger a= new BigInteger("100");
BigInteger b = new BigInteger("200");
//操作1:加减运算
BigInteger sum = a.add(b);
BigInteger diff = a.subtract(b);
//操作2:乘法和除法
BigInteger product = a.multiply(b);
BigInteger quotient = a.divide(b);
//操作3:求余数与求模
BigInteger remainder = a.remainder(b);
BigInteger mod = a.mod(b);
//操作4:比大小
int compareResult = a.compareTo(b);