De ce contează?
Semaforul are exact două stări: roșu sau verde. Contul e activ sau blocat. Nu există o a treia opțiune. Tipul bool captează această realitate: doar true sau false, 1 sau 0. Orice condiție pe care o scrii într-un if sau while produce, în final, o valoare bool — de aceea merită să o înțelegi bine.
Ce este bool?
bool este tipul care stochează valori logice: true (adevărat) sau false (fals).
Intern, true = 1 și false = 0. Orice valoare nenulă convertită la bool devine true.
bool esteParit = true;
bool esteNegativ = false;
cout << esteParit << endl; // afiseaza 1
cout << esteNegativ << endl; // afiseaza 0Operatori de comparație
Produc o valoare bool:
| Operator | Semnificație | Exemplu | Rezultat |
|---|---|---|---|
== | egal | 5 == 5 | true |
!= | diferit | 3 != 4 | true |
< | mai mic | 7 < 3 | false |
> | mai mare | 7 > 3 | true |
<= | mai mic sau egal | 5 <= 5 | true |
>= | mai mare sau egal | 4 >= 6 | false |
Operatori logici
Combină condiții bool:
| Operator | Semnificație | Regulă |
|---|---|---|
&& | ȘI logic (AND) | true doar dacă AMBII sunt true |
|| | SAU logic (OR) | true dacă CEL PUȚIN UNul e true |
! | NEGAȚIE | inversează: !true = false |
int x = 7;
bool inInterval = (x > 0) && (x < 10); // true -- 7 e intre 1 si 9
bool parSauMic = (x % 2 == 0) || (x < 5); // false -- nici par, nici < 5
bool niciParar = !(x % 2 == 0); // true -- x e impar&& și || folosesc evaluare leneșă (short-circuit): dacă primul operand al && e false, al doilea nu mai e evaluat — rezultatul e oricum false. La ||, dacă primul e true, al doilea se sare. Asta contează când al doilea operand ar putea provoca un crash (ex: împărțire la zero): n != 0 && 10/n > 2 e sigur, 10/n > 2 && n != 0 nu e.
Exemplu complet
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
bool estePar = (n % 2 == 0);
bool estePozitiv = (n > 0);
bool esteParSiPozitiv = estePar && estePozitiv;
if (esteParSiPozitiv) {
cout << n << " este par si pozitiv" << endl;
} else {
cout << n << " nu indeplineste ambele conditii" << endl;
}
return 0;
}Poți afișa bool ca text cu boolalpha: cout << boolalpha << true; afișează true în loc de 1. Util la debug, nu la concursuri.
Greșeala 1: Scrii = în loc de == într-o condiție. if (x = 5) atribuie 5 lui x și condiția e mereu true. Compilatorul poate avertiza, dar nu refuză compilarea — bug-ul rămâne silențios.
Greșeala 2: Confunzi & (AND pe biți) cu && (AND logic). Pentru valorile 0/1 produc același rezultat, dar & nu face short-circuit și pentru valori nenule poate da rezultate diferite de &&.
Greșeala 3: Compari numere reale cu ==. 0.1 + 0.2 == 0.3 e false din cauza erorilor de reprezentare în virgulă mobilă. Compară cu o toleranță: fabs(a - b) < 1e-9.