天天看點

BigInteger詳解

   在 Java

中有兩個類BigInteger和BigDecimal分别表示大整數類和大浮點數類,理論上能夠表示無線大的數,隻要計算機記憶體足夠大。

這兩個類都在 java.math.* 包中,是以每次必須在開頭處引用該包。

構造方法:

BigInteger(byte[] val)

    将包含 BigInteger 的二進制補碼表示形式的 byte 數組轉換為 BigInteger。

BigInteger(int signum, byte[] magnitude)

    将 BigInteger 的符号-數量表示形式轉換為 BigInteger。

1 import java.math.BigInteger;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         byte []bytes = new byte[]{1,2} ;
 6         BigInteger bigInteger = new BigInteger(bytes) ;
 7 //        将BigInteger的符号-數量表示形式轉換為 BigInteger。
 8 //        該符号表示為一個正負号整數值:-1 表示負,0 表示零,1 表示正。
 9 //        該大小是一個 big-endian 位元組順序的 byte 數組:最高有效位元組在第零個元素中。
10 //        允許零長度數量數組,這會導緻 BigInteger 的值為 0,無論其正負号是 -1、0 還是 1。
11 //        參數:
12 //        signum - 該數的正負号(-1 表示負,0 表示零,1 表示正)。
13 //        magnitude - 該數的大小的 big-endian 二進制表示形式。
14         System.out.println(bigInteger);
15     }
16 }      

BigInteger(int bitLength, int certainty, Random rnd)

    構造一個随機生成的正 BigInteger,它可能是一個具有指定 bitLength 的素數。

BigInteger(int numBits, Random rnd)

    構造一個随機生成的 BigInteger,它是在 0 到 (2^numBits - 1)(包括)範圍内均勻分布的值。

1 import java.math.BigInteger;
 2 import java.util.Random;
 3 
 4 public class Main {
 5     public static void main(String[] args) {
 6         Random r = new Random() ;
 7         // 随機素數
 8         BigInteger bigInteger = new BigInteger(5,20,r);
 9         //certainty 代表是素數的機率,越大是素數的機率越小  1-1/2^certainty
10         //bitLength 代表bit長度
11         //比如本例輸出為23,二進制表示為11101
12         //5位最大表示為25,是以最大為25
13         System.out.println(bigInteger);
14         // 随機數
15         BigInteger bigInteger1 = new BigInteger(10,r);
16         // 0 到 (2^numBits - 1) 範圍的随機數
17         System.out.println(bigInteger1);
18     }
19 }      

BigInteger(String val)

    将 BigInteger 的十進制字元串表示形式轉換為 BigInteger。

BigInteger(String val, int radix)

    将指定基數的 BigInteger 的字元串表示形式轉換為 BigInteger。

1 import java.math.BigInteger;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         BigInteger bigInteger = new BigInteger("123456789") ;
 6         System.out.println(bigInteger);
 7         BigInteger bigInteger1 = new BigInteger("111110",2) ;
 8         // 将基數為2的二進制數(111110)轉換為BigInteger的10進制類型
 9         System.out.println(bigInteger1);
10     }
11 }      

BigIntegerd的方法摘要:

BigInteger abs()

  傳回其值是此 BigInteger 的絕對值的 BigInteger。

1 import java.math.BigInteger;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         BigInteger bigInteger = new BigInteger("-123456789") ;
 6         System.out.println(bigInteger);
 7         bigInteger = bigInteger.abs();
 8         System.out.println(bigInteger);
 9     }
10 }
11 /*
12 -123456789
13 123456789
14 Process finished with exit code 0
15 */      

BigInteger add(BigInteger val)

  傳回其值為 (this + val) 的 BigInteger。

1 import java.math.BigInteger;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         BigInteger bigInteger = new BigInteger("123456789") ;
 6         bigInteger = bigInteger.add(new BigInteger("12312312312"));
 7         System.out.println(bigInteger);
 8     }
 9 }
10 /*
11 12435769101
12 
13 Process finished with exit code 0
14 */      

BigInteger and(BigInteger val)

  傳回其值為 (this & val) 的 BigInteger。

BigInteger andNot(BigInteger val)

  傳回其值為 (this & ~val) 的 BigInteger。

int bitCount()

  傳回此 BigInteger 的二進制補碼表示形式中與符号不同的位的數量。

int bitLength()

  傳回此 BigInteger 的最小的二進制補碼表示形式的位數,不包括 符号位。

BigInteger clearBit(int n)

  傳回其值與清除了指定位的此 BigInteger 等效的 BigInteger。

int compareTo(BigInteger val)

  将此 BigInteger 與指定的 BigInteger 進行比較。

BigInteger divide(BigInteger val)

  傳回其值為 (this / val) 的 BigInteger。

BigInteger[] divideAndRemainder(BigInteger val)

  傳回包含 (this / val) 後跟 (this % val) 的兩個 BigInteger 的數組。

double doubleValue()

  将此 BigInteger 轉換為 double。

boolean equals(Object x)

  比較此 BigInteger 與指定的 Object 的相等性。

BigInteger flipBit(int n)

  傳回其值與對此 BigInteger 進行指定位翻轉後的值等效的 BigInteger。

float floatValue()

  将此 BigInteger 轉換為 float。

BigInteger gcd(BigInteger val)

  傳回一個 BigInteger,其值是 abs(this) 和 abs(val) 的最大公約數。

int getLowestSetBit()

  傳回此 BigInteger 最右端(最低位)1 比特的索引(即從此位元組的右端開始到本位元組中最右端 1 比特之間的 0 比特的位數)。

int hashCode()

  傳回此 BigInteger 的哈希碼。

int intValue()

  将此 BigInteger 轉換為 int。

boolean isProbablePrime(int certainty)

  如果此 BigInteger 可能為素數,則傳回 true,如果它一定為合數,則傳回 false。

long longValue()

  将此 BigInteger 轉換為 long。

BigInteger max(BigInteger val)

  傳回此 BigInteger 和 val 的最大值。

BigInteger min(BigInteger val)

  傳回此 BigInteger 和 val 的最小值。

BigInteger mod(BigInteger m)

  傳回其值為 (this mod m) 的 BigInteger。

BigInteger modInverse(BigInteger m)

  傳回其值為 (this-1 mod m) 的 BigInteger。

BigInteger modPow(BigInteger exponent, BigInteger m)

  傳回其值為 (thisexponent mod m) 的 BigInteger。

BigInteger multiply(BigInteger val)

  傳回其值為 (this * val) 的 BigInteger。

BigInteger negate()

  傳回其值是 (-this) 的 BigInteger。

BigInteger nextProbablePrime()

  傳回大于此 BigInteger 的可能為素數的第一個整數。

BigInteger not()

  傳回其值為 (~this) 的 BigInteger。

BigInteger or(BigInteger val)

  傳回其值為 (this | val) 的 BigInteger。

BigInteger pow(int exponent)

  傳回其值為 (thisexponent) 的 BigInteger。

static BigInteger probablePrime(int bitLength, Random rnd)

  傳回有可能是素數的、具有指定長度的正 BigInteger。

BigInteger remainder(BigInteger val)

  傳回其值為 (this % val) 的 BigInteger。

BigInteger setBit(int n)

  傳回其值與設定了指定位的此 BigInteger 等效的 BigInteger。

BigInteger shiftLeft(int n)

  傳回其值為 (this << n) 的 BigInteger。

BigInteger shiftRight(int n)

  傳回其值為 (this >> n) 的 BigInteger。

int signum()

  傳回此 BigInteger 的正負号函數。

BigInteger subtract(BigInteger val)

  傳回其值為 (this - val) 的 BigInteger。

boolean testBit(int n)

  當且僅當設定了指定的位時,傳回 true。

byte[] toByteArray()

  傳回一個 byte 數組,該數組包含此 BigInteger 的二進制補碼表示形式。

String toString()

  傳回此 BigInteger 的十進制字元串表示形式。

String toString(int radix)

  傳回此 BigInteger 的給定基數的字元串表示形式。

static BigInteger valueOf(long val)

  傳回其值等于指定 long 的值的 BigInteger。

BigInteger xor(BigInteger val)

  傳回其值為 (this ^ val) 的 BigInteger。