Ce face int
int este tipul folosit implicit pentru numere întregi: vârste, cantități, contoare, indici. Pe calculatoarele de azi ocupă 4 octeți (32 de biți), deci poate ține valori între -2.147.483.648 și 2.147.483.647.
Împărțirea a două int-uri dă tot un int: partea zecimală se pierde (7 / 2 este 3). Restul împărțirii se obține cu %. Pentru numere mai mari folosește long long (vezi short, long, signed, unsigned).
Din C++14 poți separa cifrele cu apostrof pentru lizibilitate: 1'000'000.
Exemple
Exemplul 1: Operații cu întregi
#include <print>
int main() {
int bomboane = 17;
int copii = 5;
std::println("Fiecare copil primește {} bomboane", bomboane / copii);
std::println("Rămân {} bomboane", bomboane % copii);
std::println("7 / 2 = {}, dar 7.0 / 2 = {}", 7 / 2, 7.0 / 2);
}
Rezultat
Fiecare copil primește 3 bomboane
Rămân 2 bomboane
7 / 2 = 3, dar 7.0 / 2 = 3.5
Exemplul 2: Limitele tipului int
std::numeric_limits din <limits> spune exact ce valori încap în tip pe calculatorul tău.
#include <limits>
#include <print>
int main() {
std::println("Octeți: {}", sizeof(int));
std::println("Minim: {}", std::numeric_limits<int>::min());
std::println("Maxim: {}", std::numeric_limits<int>::max());
int populatie_iasi = 271'692;
std::println("Populația Iașului: {}", populatie_iasi);
}
Rezultat
Octeți: 4
Minim: -2147483648
Maxim: 2147483647
Populația Iașului: 271692
Exemplul 3: Conversia din text și din număr real
La conversia unui double în int, zecimalele sunt tăiate (nu rotunjite), inclusiv la numerele negative.
#include <print>
#include <string>
int main() {
int din_text = std::stoi("250");
int taiat = static_cast<int>(9.99);
int negativ = static_cast<int>(-2.7);
std::println("{} {} {}", din_text + 1, taiat, negativ);
}
Rezultat
251 9 -2
Greșeli frecvente
- Depășești limita:
int x = 2'000'000'000; x = x * 2;. Depășirea la tipurileintcu semn este comportament nedefinit, nu „se întoarce” la valori negative în mod garantat. Foloseștelong longpentru valori mari. - Calculezi o medie cu
int suma / int numarși pierzi zecimalele. Transformă una dintre valori:static_cast<double>(suma) / numar. - Folosești o variabilă
intneinițializată (int total; total += 5;). Valoarea de pornire este întâmplătoare; inițializează mereu:int total = 0;.
Comenzi înrudite
signed, unsigned, short, long: Modificatori care schimbă mărimea (short, long) sau semnul (signed, unsigned) tipurilor întregi.double, float: Tipuri pentru numere reale (cu zecimale): double are aproximativ 15-16 cifre exacte, float doar 6-7.char: Tipul pentru un singur caracter (un octet); în spate este un număr mic, codul caracterului.sizeof: Dă numărul de octeți ocupați în memorie de un tip sau de o variabilă; se calculează la compilare.auto: Lasă compilatorul să deducă tipul variabilei din valoarea cu care este inițializată.std::numeric_limits: Dă proprietățile unui tip numeric: valoarea maximă și minimă, precizia, dacă are semn, infinitul.std::int32_t: Tipuri întregi cu mărime exactă: int32_t are mereu 32 de biți, uint8_t 8 biți fără semn etc.