天天看點

[Java BigInteger]--介紹和使用說明

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  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