java BigInteger的基本使用

BigInteger


注意对象一旦创建,内部记录的值不能发生改变

java 复制代码
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常见方法

java 复制代码
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是特殊值

相关推荐
s1hiyu几秒前
C++动态链接库开发
开发语言·c++·算法
(❁´◡`❁)Jimmy(❁´◡`❁)2 分钟前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
星火开发设计6 分钟前
C++ 预处理指令:#include、#define 与条件编译
java·开发语言·c++·学习·算法·知识
许泽宇的技术分享8 分钟前
第 1 章:认识 Claude Code
开发语言·人工智能·python
AIFQuant23 分钟前
如何利用免费股票 API 构建量化交易策略:实战分享
开发语言·python·websocket·金融·restful
Hx_Ma1623 分钟前
SpringMVC返回值
java·开发语言·servlet
Yana.nice27 分钟前
openssl将证书从p7b转换为crt格式
java·linux
独自破碎E30 分钟前
【滑动窗口+字符计数数组】LCR_014_字符串的排列
android·java·开发语言
想逃离铁厂的老铁33 分钟前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
2601_9494800635 分钟前
【无标题】
开发语言·前端·javascript