int în C++

Tipul de bază pentru numere întregi (fără zecimale), de obicei pe 4 octeți, cu valori între aproximativ -2,1 și 2,1 miliarde.

Sintaxă
int nume = valoare;

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 tipurile int cu semn este comportament nedefinit, nu „se întoarce” la valori negative în mod garantat. Folosește long long pentru 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ă int neiniț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.