De ce contează?
Gândește-te la o cutie de ouă cu exact 30 de locașuri. Poți pune în ea 5 ouă sau 28 de ouă — dar niciodată „jumătate de ou” într-un locaș. Cutia ține doar bucăți întregi. Tipul int din C++ este chiar o astfel de cutie: reține numere întregi, nimic cu virgulă.
Intuiția
Când numeri elevi, mere sau pași, răspunsul e mereu un număr întreg: nu există „3,5 elevi”. Pentru astfel de mărimi, C++ îți dă tipul int. El reține numere ca -7, 0, 42 sau 1000, dar nu reține partea de după virgulă. Dacă încerci să bagi 3.5 într-un int, partea zecimală pur și simplu dispare și rămâne 3.
Ce este
Un int este o variabilă care reține un număr întreg: pozitiv, negativ sau zero, fără parte zecimală.
Dar cutia are o limită. Un int ține numere cam de la −2 miliarde la +2 miliarde (mai exact, de la −2.147.483.648 la 2.147.483.647). Atât încape — nici un număr mai mare nu mai are loc. Când ai nevoie de numere mai mari (de ordinul miliardelor sau al miliardelor de miliarde), folosești long long, care e o cutie mult mai încăpătoare.
Reține două praguri simple: un număr între cam −2 și +2 miliarde încape într-un int; orice trece de 2 miliarde are nevoie de long long. Nu memora cifrele exacte — memorează ordinul de mărime: „int ține până pe la 2 miliarde”.
Pe lângă limita asta, int-ul are o particularitate la împărțire. Pentru că nu poate reține zecimale, împărțirea a două numere întregi dă tot un întreg — partea de după virgulă e tăiată. Asta se numește împărțire întreagă.
C++ îți dă doi operatori care lucrează împreună:
/îți dă câtul (de câte ori intră numitorul, fără zecimale);%(modulo) îți dă restul rămas după acea împărțire.
Cum arată
Hai să împărțim niște numere concrete și să ne uităm la ce iese din / și ce iese din %. Gândește-te ca la împărțirea de la clasa a treia: „câte grupe complete și cât rămâne pe dinafară”.
| Expresie | Rezultat | De ce |
|---|---|---|
7 / 2 | 3 | 2 intră de 3 ori în 7 (3·2 = 6); zecimala 0,5 e tăiată, NU 3,5 |
7 % 2 | 1 | după ce scoți 6 din 7, rămâne 1 |
10 / 3 | 3 | 3 intră de 3 ori în 10 (3·3 = 9) |
10 % 3 | 1 | după ce scoți 9 din 10, rămâne 1 |
Observă perechea: 7 = 3·2 + 1 și 10 = 3·3 + 1. Câtul (/) și restul (%) se completează mereu: numitor · cât + rest = numărul de la început.
Vizual, pentru 7 / 2 și 7 % 2, grupezi cele 7 unități în grupe de câte 2:
1 | 1 | 1 | 1 | 1 | 1 | 1 |
Cele 6 unități verzi formează 3 perechi (câtul 3), iar unitatea rămasă pe dinafară este restul 1.
Implementare C++
Programul citește două numere întregi și afișează câtul și restul împărțirii lor:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int cat = a / b; // impartirea intreaga: 7 / 2 = 3
int rest = a % b; // restul (modulo): 7 % 2 = 1
cout << "Cat: " << cat << endl;
cout << "Rest: " << rest << endl;
return 0;
}Dacă rulezi cu a = 7 și b = 2, programul afișează Cat: 3 și Rest: 1. Cu a = 10 și b = 3, afișează Cat: 3 și Rest: 1.
Operatorul % e mult mai util decât pare. „Numărul este par?” înseamnă exact a % 2 == 0 (restul împărțirii la 2 este zero). „Care e ultima cifră a lui a?” este a % 10. Le vei folosi tot timpul.
Două capcane clasice cu int:
1. Surpriza împărțirii întregi. Scrii 5 / 2 așteptându-te la 2.5, dar primești 2 — zecimala e tăiată fără să te avertizeze nimeni. La fel, media a două note (7 + 8) / 2 dă 7, nu 7.5. Dacă vrei zecimale, ai nevoie de alt tip (double).
2. Depășirea (overflow). Un int ține doar până pe la 2 miliarde. Dacă încerci să reții 3000000000 (3 miliarde) într-un int, numărul nu încape și valoarea se strică tăcut — primești un rezultat aberant, fără eroare. Soluția: folosește long long pentru numere mari. Capcana apare des când înmulțești: a * b poate depăși 2 miliarde chiar dacă a și b încap fiecare separat în int.