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是特殊值

相关推荐
sql2008help16 分钟前
使用spring-boot-starter-validation实现入参校验
java·开发语言
Mr_Air_Boy21 分钟前
springboot集成xxl-job
java·spring boot·spring
Babybreath-1 小时前
Tomcat
java·tomcat
摇滚侠1 小时前
面试实战 问题二十三 如何判断索引是否生效,什么样的sql会导致索引失效
java
悟纤1 小时前
当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
java·spring boot·后端
江影影影3 小时前
Spring Boot 2.6.0+ 循环依赖问题及解决方案
java·spring boot·后端
chilavert3184 小时前
技术演进中的开发沉思-62 DELPHI VCL系列:VCL下的设计模式
开发语言·delphi
Jonathan丶BNTang4 小时前
IntelliJ IDEA 2025.2 重磅发布
java·ide·intellij-idea
tanxiaomi5 小时前
学习分库分表的前置知识:高可用系统架构理论与实践
java·mysql·spring cloud·系统架构·springboot
晨非辰5 小时前
#C语言——刷题攻略:牛客编程入门训练(六):运算(三)-- 涉及 辗转相除法求最大公约数
c语言·开发语言·经验分享·学习·学习方法·visual studio