javabiginteger最⼤值_精确计算之:详解BigInteger的使⽤
在 Java 中,有许多数字处理的类,⽐如 Integer类,但是Integer类有⼀定的局限性。
我们都知道 Integer 是 Int 的包装类,int 的最⼤值为 2^31-1。若希望描述更⼤的整数数据时,使⽤Integer 数据类型就⽆法实现了,所以Java中提供了BigInteger 类。
BigInteger类型的数字范围较Integer,Long类型的数字范围要⼤得多,它⽀持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表⽰任何⼤⼩的整数值⽽不会丢失任何信息。
下⾯,让我们⼀起来学习⼀下BigInteger的常⽤⽅法:
正⽂
nextint()方法读⼊⽅法
nextBigInteger():控制台读⼊⼀个BigInteger型数据,类似于int型的nextInt();
构造⽅法
默认为⼗进制,也是我们最常⽤的,同时也⽀持⾃定义进制类型(已存在的);
基本运算
返回值为BigInteger类型:add(),subtract(),multiply(),divide(),mod(),remainder(),pow(),abs(),negate();
⽐较⼤⼩
compareTo()返回⼀个int型数据:1 ⼤于; 0 等于; -1 ⼩于;
max(),min():分别返回⼤的(⼩的)那个BigInteger数据;
常量
ZERO,ONE,TEN 返回值为BigInteger类型:有朋友提到的-1,2,源码注释⾥⾯已表明不再输出(Not exported.);
类型转换
将BigInteger数据转换成基本数据类型,还可以转换成radix进制的字符串形式;
⼆进制运算
返回值为BigInteger类型,此类⽅法不常⽤,有备⽆患;
权限控制
setBit(),testBit():可⽤于菜单的权限控制,⾮常好⽤,原理如下:
源码分析
setBit():将set进去变量作为⼆进制数,计算它们的和,并以⼗进制显⽰;testBit():与setBit()相反,验证this的⼆进制组成元素中是否包含传⼊的变量;
⼩结
1. BigInteger也是不可变的,在进⾏每⼀步运算时,都会产⽣⼀个新的对象。
2. 发⽣异常算术条件时,会抛出ArithmeticException异常。例如,⼀个整数除以“0”,会抛出⼀个这个类的实例;
3. 假设计算⼀个int数据平⽅与另⼀个⼤⼩的问题,很可能会内存溢出。除了使⽤⼆分法外,利⽤BigInteger的compareTo⽅法也是⼀
个好选择,简单易懂,⽽且不需要算法⽀持;
4. 本章作为笔记使⽤,内容⽐较全⾯,但常⽤的只有:构造函数,基本运算以及compareTo(),intValue(),setBit(),testBit()⽅法;
5. setBit()和testBit()⽅法可⽤于菜单的权限控制,⼩编在开发中多次尝试,⾮常好⽤。很多微博有相关介绍,在这⾥我不做项⽬演⽰
了。