Java >> Java tutorial >  >> Tag >> class

BigInteger Class i Java

Java indeholder indbyggede eller primitive data, der omhandler typen og størrelsen en variabel kan tage for at udføre matematiske operationer. Men nogle gange er de ikke i stand nok til at holde beregnede værdier, da de har nogle begrænsninger.

For eksempel kan en lang datatype have værdier fra -263 til 263-1 , der er i stand til at holde den højeste værdi blandt primitive datatyper.

Lad os sige, at du skal beregne en faktor på 200, der vil give dig 375 cifre eller massen af ​​jorden, som vejer omkring 5,972 × 1024 kg , uden for rækkevidden af ​​den værdi, en primitiv datatype kan indeholde.

Java BigInteger-klassen beskæftiger sig med de meget store heltal, hvilket giver dig mulighed for at lagre så store heltalsværdier, du ønsker; teoretisk set er der ingen grænse. Det er dog pragmatisk begrænset på grund af et systems begrænsede hukommelse.

I denne guide vil vi overveje hver enkelt faktor omkring BigInteger Class i Java så du nemt kan forstå emnet.

Hvad er BigInteger Class i Java?

BigInteger er et klassebibliotek, der er bygget til at håndtere beregninger, der involverer meget store heltal. Den er designet til at håndtere beregninger, som en normal primitiv heltalsdatatype ikke kan håndtere.

Java BigInteger-klassen implementerer en sammenlignelig grænseflade og udvider Number-klassen. JavaBigInteger klasse kan udføre alle funktioner såsom addition, subtraktion, produkt, division og at finde GCD af to tal.

Metoder til at initialisere BigInteger Class i Java?

Der er forskellige måder, hvorpå vi kan initialisere variablerne for BigInteger-datatypen.

Følgende er nogle få metoder til at gøre det samme:

  1. BigInteger(byte[]-værdi): Af denne konstruktør sendes et array af bytes, der lagrer 2's komplement binært kodede heltal, som et argument.
  2. BigInteger(int tegn for tal, byte[] størrelsesordenOfNumber): Ved at bruge denne konstruktør kan vi initialisere variablen uden om tegnet sammen med størrelsen af ​​det helt tal.
  3. BigInteger(int numberBits, tilfældig værdi): Bruges til at generere et tilfældigt tal, der kan være i området fra nul til power(2, numberBits) - 1 inklusive.
  4. BigInteger(String value): En heltalsvariabel kan initialiseres ved at sende en strengform af heltallet ved hjælp af denne konstruktør.

Hvordan erklærer man BigInteger Class i Java?

Ligesom den normale heltalsdatatype kan vi erklære variablerne for datatypen BigInteger på samme måde.

Følgende er den komparative måde, hvorpå vi kan erklære heltal såvel som BigInteger datatypevariabler:

int var1, var2;                
BigInteger VAR1, VAR2;

Fra ovenstående eksempel kan vi se, at vi har erklæret variablerne for datatypen BigInteger i alle bogstaver; det anses for god praksis at gøre det, fordi de er forekomster af BigInteger-klassen. For at differentiere det med heltal datatyper variabler typer, gør vi det.

var1 = 54;
var2 = 23;
VAR1  = BigInteger.valueVAR1  = new BigInteger("504");
VAR2  = new BigInteger("3572435378609854313");

Til initialisering af variabel ved at sende en streng som et argument:

VAR1  = new BigInteger("504");
VAR2  = new BigInteger("3572435378609854313"); 

For at udføre en lille aritmetisk operation:

int res = var1 + var2;
BigInteger RESULT = VAR1.add(VAR2); 

Metoder, der tilbydes af Java BigInteger-klassen

S.NO Metodenavn Beskrivelse
1. BigInteger abs() Denne metode returnerer en positiv (absolut) værdi af datatypen BigInteger.
2. BigInteger add(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi, der svarer til at kalde objektet værditilført med bestået objekts værdi.
3. BigInteger and(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med at kalde objektværdi bitvis OG (&) med bestået objekts værdi.
4. BigInteger andNot(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med at kalde objektværdi bitvis OG (&) med negeret bestået objekts værdi.
5. int bitCount() Returnering af antallet af bits i dette BigInteger's to-komplementrepræsentation, der adskiller sig fra dets fortegnsbit.
6. int bitLength() Returnerer antallet af bits i minimum 2's komplementform (ikke inklusive fortegnsbitten).
7. BigInteger clearBit(int n) Returnering af et BigInteger efter at have ryddet dets udpegede bits fra den oprindelige repræsentation.
8. int compareTo(BigInteger value) Sammenligner det kaldende objekts værdi med værdien af ​​den værdi, der sendes i argumentet.
9. BigInteger divide(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med kaldende objektværdi divideret med bestået objekts værdi.
10. BigInteger[ ] divideAndRemainder(BigInteger value) Returnerer to nye BigInteger-arrays, hvor den ene indeholder resulterende værdi lig med kaldende objektværdi divideret med bestået objekts værdi, og den anden indeholder resulterende værdi på 9objectValue%value).
11. double doubleValue() Returner dobbeltværdien efter konvertering af BigInteger-værdien til dobbelt.
12. boolesk lig (Objekt x) Sammenligner den beståede objektværdi med den ved at kalde objektets værdi.
13. BigInteger flipBit(int n) Returnerer et nyt BigInteger med en værdi opnået efter at have spejlvendt den angivne bit.
14. float floatValue() Returnerer den float-ækvivalente værdi af det store heltalsobjekt.
15. BigInteger gcd(BigInteger value) Returnerer den største fælles divisor af de to (kaldende objekts værdi og abs(værdi)).
16. int getLowestSetBit() Returnerer indekset for den lavest indstillede bit, dvs. bit med værdi =1, i det kaldende objekts værdi.
17. int hashCode() Denne metode returnerer hashkoden for det kaldende BigInteger-objekts værdi.
18. int intValue() Returnerer værdien efter konvertering af BigInteger-objektets værdi til heltalsdatatype.
19. boolesk isProbablePrime(int num) Udfører primalitetstesten og returnerer sand, hvis tallet er primtal, ellers returnerer falsk.
20. long longValue() Returnerer værdien efter konvertering af BigInteger-objektets værdi til en lang lang datatype.
21. BigInteger max(BigInteger value) Returnerer den værdi, der er maksimum blandt begge (kaldende objekts værdi eller værdi).
22. BigInteger min(BigInteger val) Returnerer den værdi, der er minimum blandt begge (kaldende objekts værdi eller værdi).
23. BigInteger mod(BigInteger number) Returnering af en værdi, der er lig tob(kaldende objekts værdi)mod (tal).
24. BigInteger modInverse(BigInteger m) Returnering af en værdi, der er lig med det omvendte af (kalder objektets værdi)mod (tal).
25. BigInteger modPow(BigInteger exp, BigInteger modulo) Returnerer den værdi, der er lig med (objektets værdi hævet til power exp) mod modulo.
26. BigInteger multiplicer(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med kaldende objektværdi ganget med bestået objekts værdi.
27. BigInteger negate() Returnerer den negerede værdi af det kaldende objekts værdi.
28. BigInteger nextProbablePrime() Returnerer det primtal, som lige er større end det kaldende objekts værdi.
29. BigInteger not() Returnerer ~denne værdi for det kaldende objekt.
30. BigInteger or(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med at kalde objektværdi bitvis ELLER med bestået objekts værdi.
31. BigInteger pow(int exp) Returnerer den værdi, der er lig med at kalde objektets værdi ganget med hinanden.
32. statisk BigInteger probablePrime(int bitLen, Random rand) Returnerer det ikke-negative BigInteger, som vil være et primtal med længde bitLen.
33. BigInteger rest(BigInteger val) Returnerer værdien efter at have udført modulo-operationen med Val.
34. BigInteger setBit(int n) Returnerer et nyt BigInteger efter at have indstillet den n'te indekseret =1.
35. BigInteger shiftLeft(int num) Returnerer et tal efter at have flyttet det kaldende objekts værdi num gange til venstre.
36. BigInteger shiftRight(int num) Returnerer et tal efter at have flyttet det kaldende objekts værdi num gange til højre.
37. int signum() Returnerer -1, 0 eller 1 baseret på tegnet for det kaldende objekts værdi.
38. BigInteger subtract(BigInteger value) Returnerer et nyt BigInteger med resulterende værdi lig med kaldende objektværdi for at trække fra med bestået objekts værdi.
39. boolesk testBit(int num) Returnerer sand, hvis den n'te indeksbit er indstillet i kaldeobjektets værdi.
40. byte[] toByteArray() Returnering af et array, der indeholder 2's komplement af kaldende objekts bigInteger.
41. String toString() Konverterer decimalen til strengrepræsentation.
42. String toString(int radix) Konverterer decimalformen til strengformat for den angivne radix.
43. statisk BigInteger valueOf(lang val) Returnerer et stort heltal, der indeholder en værdi, der svarer til en lang værdi, der er sendt som parameter.
44. BigInteger xor(BigInteger val) Returnerer et nyt BigInteger med en resulterende værdi lig med (kaldende objektværdi) XOR (bestået objekts værdi).

Kodeeksempel

import java.math.BigInteger;  
public class Main
{
    public static void main(String args[])  {  
        // Initializing result variable 
        BigInteger var1 = new BigInteger("110");  
        //returns the output of string to integer   
        BigInteger var2= new BigInteger("171");  
        System.out.println("Signum value for "+ var2 +" : "+ var2.signum());  
        //returns the next prime integer that is greater than this BigInteger.  
        BigInteger substract=var2.subtract(var1);  
        System.out.println(var2+"-"+var1+" : "+substract);  
  
       // calculates quotient after performing division of 2 values  
        BigInteger quot = var2.divide(var1);  
        System.out.print(var2 + " / " + var1+" :     Quotient : "+quot);  
  
        //calculate remainder after performing division of 2 values  
        BigInteger remainder=var1.remainder(var2);  
        System.out.println("\nRemaider : "+remainder);  
  
        //returns a BigInteger whose value is ?this << val?  
        BigInteger leftShift = var1.shiftLeft(3);  
        System.out.println("Value after performing left shift : "+ leftShift );  
        BigInteger rightShift = var1.shiftRight(3);  
        System.out.println("Value after performing right shift : "+ rightShift);
    }  
} 

Output:

Signum value for 171 : 1                                                                                                    
171-110 : 61                                                                                                                
171 / 110 :     Quotient : 1                                                                                                
Remainder : 110                                                                                                              
Value after performing left shift : 880                                                                                     
Value after performing right shift : 13

I ovenstående kode har vi udført streng til int konverteringsfunktion, subtraktionsfunktion, dividerfunktion osv. Så syntaksen for at kalde hver metode forbliver den samme, dvs. ved at bruge prikken (. ) operatør.

Dette skyldes, at Java er et objektorienteret sprog. Så hver deklarerede variabel er et objekt af respektive datatyper. Derfor skal prikoperatoren bruges til at kalde en hvilken som helst medlemsfunktion af den klasse.

Der er forskellige metoder til at konstruere et BigInteger i et Java-program for at bruge det gennem hele programmet og udføre matematiske operationer.

  1. Gennem primitive datatyper
  2. Videregivelse af en streng i en konstruktør
  3. Initialisering fra en fil

Følgende program hjælper dig med at belyse driften af ​​Big Integers:

import java.math.BigInteger;
import java.util.Scanner;

public class Main{
public static void main(String[] args){
 //constructing a BigInteger through constructor
 BigInteger a = new BigInteger("value"); //method 1
 
 BigInteger b = BigInteger.valueOf(268985); //method 2
 BigInteger c= BigInteger.TEN ; //using constant values

//Performing the basic mathematical operations 

 BigInteger result1= a.add(b) ;//addition of two big integers
 BigInteger result2= a.multiply(c) ;//multiplication
 BigInteger result3= c.subtract(a) ; //subtraction 
 BigInteger result4= b.divide(c); //division

//print the results
System.out.println("" + result1 + result2 + result3 + result4);

BigInteger immute = new BigInteger ("111");
immute.multiply(new BigInteger ("210"));
//Print the result

System.out.println(immute); //result: 111
/*In java , objects of immutable class cannot be changed once they are declared. By default, string and wrapper classes are immutable */

//Mod operations 
BigInteger mod1, mod2; //creating BigInteger objects
mod1 = new BigInteger("500");
mod2 = new BigInteger ("220");
//Perform the modulus 

BigInteger ModResult = mod1.mod(mod2); 
//Print result

System.out.println(ModResult.toString()); //output: 60

//Performing inverse mod
 BigInteger InverseMod = mod1.modInverse(mod2); 
//print result 
System.out.println(InverseMod.toString()); //Output:

 }
}

Konklusion

Igennem denne artikel har vi gennemgået introduktionen af ​​Java BigInteger-klassen. Vi har set forskellige indbyggede metoder, der tilbydes af det. Vi sammenlignede syntaksen for BigInteger-klassen med den for primitive datatyper.

Imidlertid er BigInteger-klassens interne implementering baseret på arrays for at påvirke hele algoritmens overtidskompleksitet.


Java tag