您的位置:首页 > 编程语言 > Java开发

[Java--BigInteger]--介绍和使用说明

2018-02-08 15:43 330 查看

BigInteger介绍

  1、不可变的任意精度的整数。所有操作中,都以二进制补码形式表示BigInteger(如Java的基本整数类型)。BigInteger为Java的所有基本整数运算符和java.lang.Math提供的所有相关方法提供了操作方法。另外,BigInteger还提供以下运算:取模算术、GCD计算、质数测试、素数生成、位操作以及其他一些操作。    2、算术运算的语义完全模仿Java整数算术运算符,如The  JavaLanguage Specification 中所定义的那样。例如,以零作为除数的除法抛出ArithmeticException,而负数除以正数的除法则产生一个负(或零)的余数。Spec中关于溢出的所有细节都被忽略了,因为BigIntegers所设置的实际大小能适应操作结果的需要。    3、位移操作的语义扩展了Java的位移操作符的语义,以允许产生负位移距离。具有负位移距离的右移操作会导致左移操作,反之亦然。无符号右位移运算符(>>>)被忽略,因为该操作与由这个类提供的“无穷大的词大小”抽象结合使用时是没有意义的。    4、按位逻辑运算的语义完全模仿Java的按位整数运算符的语义。二进制运算符(and, or,xor)隐式地对两个操作数的较短执行操作之前执行符号扩展。    5、比较操作执行有符号的整数比较,类似于Java的关系运算符和相等性运算符执行的比较。提供的取模算术操作用来计算余数、求幂和乘法可逆元。这些方法始终返回非负结果,范围在 0 和 (modulus - 1)(包括)之间。    6、位操作对其操作数的二进制补码表示形式的单个位进行操作。如有必要,操作数会通过扩展符号来包含指定的位。没有一个单比特操作可以产生一个与被操作的BigInteger不同的符号的BigInteger,因为它们只影响一个比特,并且由这个类提供的“无限大小”抽象确保有无限多的“虚拟每个BigInteger前面的“符号位”。  7、NullPointerException在传递任何输入参数的空对象引用时,此类中的所有方法和构造函数都会抛出 。      为了简明起见,在整个BigInteger方法的描述中使用伪代码。伪代码表达式 (i +j)是“一个BigInteger的值,BigInteger的值i加上BigInteger的BigInteger的缩写j。伪代码表达式(i == j)是“ true当且仅当BigInteger i表示与BigInteger 相同的值时”的简写形式j。其他伪代码表达式的解释类似。

BigInteger常用方法

BigInteger不是基本数据类型之一,它其实更像String,是java.math包下的一个类,但是它的初始化方式却没有String,那么方便可以直接赋值,而是跟其他自定义的类一样,要调用它的构造器进行初始化。这个类的取值范围原则上是没有上限的,取决于你的计算机的内存。

一、它的构造器

        1、BigInteger(byte[] val):将包含BigInteger的二进制补码表示形式的byte数组转换为BigInteger。        2、BigInteger(int signum, byte[] magnitude):将BigInteger的符号-数量表示形式转换为BigInteger。        3、BigInteger(int bitLength, int certainty, Random rnd):构造一个随机生成的正BigInteger,它可能是一个具有指定bitLength的素数。        4、BigInteger(int numBits, Random rnd):构造一个随机生成的BigInteger,它是在0到(2^numBits -1)范围内均匀分布的值。        5、BigInteger(String val):将BigInteger的十进制字符串表示形式转换为BigInteger。        6、BigInteger(String val, int radix):将指定基数的BigInteger的字符串表示形式转换为BigInteger。

二、在Biginteger类中还预定义了三个常量字段

1、static  BigInteger  ONE: BigInteger的常量 1。2、static BigInteger TEN:BigInteger的常量10。3、static BigInteger ZERO:BigInteger的常量 0。 

三、常用方法

  大数的加减乘除也不能使用+、-、*、/这些基本运算符号,BigInteger类没有对这些运算符号进行重定义,而是用了一些对应的方法来代替,比如add()、subtract()、mutiply()、divide()这四种方法。         BigInteger  abs() 返回大整数的绝对值        BigInteger  add(BigInteger val)返回两个大整数的和        BigInteger  and(BigInteger val) 返回两个大整数的按位与的结果(this& val)        BigInteger  andNot(BigIntegerval) 返回两个大整数与非的结果(this &~val)        BigInteger  divide(BigInteger val) 返回两个大整数的商        double       doubleValue()   返回大整数的double类型的值(即将该BigInteger转换为double)        float           floatValue()   返回大整数的float类型的值(即将该BigInteger转换为float)        BigInteger  gcd(BigInteger val) 返回大整数的最大公约数        int              intValue() 返回大整数的整型值        long           longValue() 返回大整数的long型值        BigInteger max(BigInteger val)返回两个大整数的最大者        BigInteger min(BigInteger val)返回两个大整数的最小者        BigInteger mod(BigInteger val)用当前大整数对val求模        BigInteger multiply(BigInteger val)返回两个大整数的积        BigInteger negate() 返回当前大整数的相反数(-this)        BigInteger not() 返回当前大整数的非(~this)        BigInteger or(BigIntegerval) 返回两个大整数的按位或(this | val)        BigInteger pow(intexponent)返回当前大整数的exponent次方        BigInteger  remainder(BigInteger val) 返回当前大整数除以val的余数(this % val)        BigInteger shiftLeft(intn) 将当前大整数左移n位   (this<< n)        BigInteger shiftRight (intn) 将当前大整数右移n位 (this >> n)        BigInteger  subtract(BigInteger val)返回两个大整数相减的结果(this-val)        byte[]         toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中        String toString()将当前大整数转换成十进制的字符串形式        BigInteger  xor(BigInteger val) 返回两个大整数的异或 (this ^ val)         int compareTo(BigIntegerval) 将此BigInteger与指定的BigInteger进行比较。该方法优先于六个布尔比较运算符(<,==,>,> =,!=,<=)中的每一个的单独方法提供。进行这些比较的建议习惯用法是:(x.compareTo(y)< op > 0),其中< op >是六个比较运算符之一。        boolean equals(Object x)比较此 BigInteger与指定的 Object的相等性。        static BigIntegervalueOf(long val) 返回一个BigInteger,其值等于指定的值long。        int  hashCode() 返回此 BigInteger 的哈希码。 
参考:
1、Java7 Api https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html 2、Java8 Api
   https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html  
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: