Ce face BigInteger
long are cel mult 19 cifre (până la 9.223.372.036.854.775.807). Peste această limită, adunarea „dă peste cap” și devine negativă fără niciun avertisment. BigInteger ține întregi cu oricâte cifre și nu se depășește niciodată.
Creezi un BigInteger dintr-un text (new BigInteger("…"), eventual cu bază: new BigInteger("ff", 16)) sau dintr-un long cu BigInteger.valueOf(n). Constantele ZERO, ONE, TWO și TEN sunt gata făcute.
Ca BigDecimal, este imutabil și nu folosește operatori: add, subtract, multiply, divide, mod, pow. Înapoi la long treci cu longValueExact(), care aruncă excepție dacă numărul nu încape.
Parametri
| Parametru | Descriere |
|---|---|
text |
Numărul ca text, doar cifre (și semn). |
valoare |
Pentru valueOf: un long. |
Ce returnează
Un obiect BigInteger imutabil.
Exemple
Exemplul 1: long se depășește, BigInteger nu
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
long maxim = Long.MAX_VALUE;
System.out.println("long: " + maxim + " + 1 = " + (maxim + 1));
BigInteger mare = BigInteger.valueOf(maxim);
System.out.println("BigInteger: " + mare + " + 1 = " + mare.add(BigInteger.ONE));
}
}
Rezultat
long: 9223372036854775807 + 1 = -9223372036854775808
BigInteger: 9223372036854775807 + 1 = 9223372036854775808
Exemplul 2: Valori din text, în baze diferite
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger iban = new BigInteger("1234567890123456789012345");
BigInteger hex = new BigInteger("ff", 16);
System.out.println("Număr lung: " + iban + ", cifre: " + iban.toString().length());
System.out.println("ff în baza 16 = " + hex);
System.out.println("255 în baza 2 = " + hex.toString(2));
System.out.println("Biți necesari: " + iban.bitLength());
}
}
Rezultat
Număr lung: 1234567890123456789012345, cifre: 25
ff în baza 16 = 255
255 în baza 2 = 11111111
Biți necesari: 81
Exemplul 3: Înapoi la long, cu verificare
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger mic = BigInteger.valueOf(2026);
BigInteger mare = BigInteger.TEN.pow(20);
System.out.println("mic ca long: " + mic.longValueExact());
try {
System.out.println(mare.longValueExact());
} catch (ArithmeticException e) {
System.out.println("10^20 nu încape în long: " + e.getMessage());
}
System.out.println("longValue() fără verificare: " + mare.longValue());
}
}
Rezultat
mic ca long: 2026
10^20 nu încape în long: BigInteger out of long range
longValue() fără verificare: 7766279631452241920
Greșeli frecvente
- Folosești
longpentru factoriale sau puteri mari. 21! nu mai încape și rezultatul devine greșit fără eroare. - Folosești
longValue()și crezi că este sigur. Taie biții în plus și dă un număr greșit; foloseștelongValueExact().
Comenzi înrudite
BigInteger.add: Adunare, scădere, înmulțire și împărțire întreagă cu BigInteger, fără depășire.BigInteger.pow: pow ridică la putere (2^100 exact); mod dă restul împărțirii, mereu pozitiv; modPow calculează rapid (a^b) mod m.BigInteger.isProbablePrime: Verifică dacă un număr mare este prim: false înseamnă sigur compus, true înseamnă prim cu probabilitate foarte mare.BigDecimal: Număr zecimal exact, fără erori de rotunjire ca la double; se folosește pentru bani, prețuri și calcule financiare.