BigInteger
注意对象一旦创建,内部记录的值不能发生改变
import java.math.BigInteger;
import java.util.Random;
public class myBigInteger {
public static void main(String[] args) {
//获取一个随机的大整数
BigInteger bigInteger=new BigInteger(4,new Random());
System.out.println(bigInteger);//随机的范围是0到2的4次方-1
//所以这个范围在0到15
//获取一个随机的大整数 必须是整数
BigInteger bigInteger1=new BigInteger("111");
System.out.println(bigInteger1);//打印结果为111
//获取指定进制的大整数
BigInteger bigInteger2=new BigInteger("100",10);
//表示获取10进制的100 打印结果为100
//BigInteger bigInteger3=new BigInteger("123",2);
//System.out.println(bigInteger3);
//打印结果报错 因为 2进制只有0和1
//静态方法获取BigInteger的对象 内部有优化
BigInteger bigInteger4=BigInteger.valueOf(100);
System.out.println(bigInteger4);//打印结果为100
//但是他有一个缺点就是他的最大值是long的取值范围 超过long的就会报错
System.out.println(Long.MAX_VALUE);//获取long的最大值9223372036854775807
// BigInteger bigInteger5=BigInteger.valueOf(9223372036854775807);//这个会报错是因为默认是int型的末尾加个L就可以了
BigInteger bigInteger6=BigInteger.valueOf(9223372036854775807L);//这个会报错是因为默认是int型的末尾加个L就可以了
//这个可以正常打印但是超过范围就不行了
//BigInteger bigInteger7=BigInteger.valueOf(9223372036854775808L);//报错
//内部有优化提起那吧-16到16先创建好了BigInteger对象 如果多次获取就不会创建新的
BigInteger bigInteger7=BigInteger.valueOf(16);
BigInteger bigInteger8=BigInteger.valueOf(16);
System.out.println(bigInteger7==bigInteger8);//true
}
小结
BigInteger常见方法
import java.math.BigInteger;
public class myBigInteger2 {
public static void main(String[] args) {
BigInteger bigInteger=BigInteger.valueOf(10);
BigInteger bigInteger1=BigInteger.valueOf(2);
BigInteger add = bigInteger.add(bigInteger1);
System.out.println(add);//打印结果为12
BigInteger[] bigIntegers = bigInteger.divideAndRemainder(bigInteger1);
//返回是一个数组 因为他要返回商和余数 a0是商 a1是余数
System.out.println(bigIntegers[0]);//5
System.out.println(bigIntegers[1]);//0
boolean b = bigInteger.equals(bigInteger1);
System.out.println(b);//比较是否相同 返会false
BigInteger pow = bigInteger.pow(2);
System.out.println(pow);//打结果为10的2次方 100
BigInteger max = bigInteger.max(bigInteger1);
System.out.println(max);//返回两个的最大值
//转化为int型整数 超出范围数据有误
BigInteger bigInteger3=BigInteger.valueOf(200L);
int i = bigInteger3.intValue();
System.out.println(i);//打印结果200
//转化为小数
BigInteger bigInteger2=BigInteger.valueOf(100);
double v = bigInteger2.doubleValue();
System.out.println(v);//打印结果100.0
}
}
BigInteger的底层存储原理
思考:为什么BigInteger能存储比自己大的数
因为采用分段是存储方式,第一个是符号位,第二三是以补码表示的两个32位数
BigInteger是有存储上限的但是上限特别高几乎是无限的
数组的最大长度21个亿长大概
总结
注意:BigInteger.valueOf()通常用于小一点的数组 因为他的-16到16是特殊值