Teorie: Sisteme de Numerație. Conversii Baza 2 ↔ Baza 10
Transformarea din binar în zecimal (suma puterilor) și din zecimal în binar (împărțirea repetată).
Sisteme de Numerație (Baza 2 și Baza 10)
În viața de zi cu zi folosim Sistemul Zecimal (Baza 10), bazat pe 10 cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Totuși, calculatoarele funcționează la nivel fizic cu întrerupătoare (curent "oprit" sau "pornit"), de aceea folosesc Sistemul Binar (Baza 2), care are doar două cifre: 0 și 1.
Un exercițiu foarte clasic (inclusiv la examene/teste) este trecerea unui număr din baza 2 în baza 10 și invers.
1. Conversia din Binar (Baza 2) în Zecimal (Baza 10)
Pentru a transforma un număr din baza 2 în baza 10, folosim regula dezvoltării în sumă de puteri ale bazei. Pe scurt: înmulțim fiecare cifră a numărului binar cu 2poziție, începând cu poziția 0 de la dreapta la stânga.
Exemplu: Transformăm numărul binar 1101 în zecimal
| Poziția (Puterile lui 2) | 3 | 2 | 1 | 0 |
| Cifrele Binare | 1 | 1 | 0 | 1 |
Calcul:
= (1 × 23) + (1 × 22) + (0 × 21) + (1 × 20)
= (1 × 8) + (1 × 4) + 0 + (1 × 1)
= 8 + 4 + 0 + 1
= 13 (în baza 10)
1, 2, 4, 8, 16, 32... și apoi pur și simplu adunați puterile care au cifra 1 deasupra lor!2. Conversia din Zecimal (Baza 10) în Binar (Baza 2)
Cea mai sigură metodă este împărțirea repetată la 2. Împărțim numărul la 2, reținem restul (care va fi mereu 0 sau 1), iar noul număr devine câtul. Repetăm procesul până când câtul ajunge 0. La final, citim resturile de jos în sus (în ordine inversă).
Exemplu: Transformăm numărul zecimal 25 în binar
25 : 2 = 12, rest 1 ⬆️ (ultima cifră)
12 : 2 = 6, rest 0 ⬆️
6 : 2 = 3, rest 0 ⬆️
3 : 2 = 1, rest 1 ⬆️
1 : 2 = 0, rest 1 ⬆️ (prima cifră)
Citind resturile de jos în sus, obținem:
25 (în baza 10) = 11001 (în baza 2)
3. Variabile și Expresii Logice
În C++, adevărul și falsul sunt reprezentate prin tipul de date bool. O variabilă booleană poate avea doar două valori: true (Adevărat, valoarea numerică 1) sau false (Fals, valoarea numerică 0). De fapt, în C++, orice număr diferit de 0 este considerat true, iar 0 este considerat false.
Operatori Logici Fundamentali
true DOAR dacă amândouă expresiile sunt adevărate.Ex:
(x > 0 && x < 10) - x aparține intervalului (0, 10).true dacă cel puțin una dintre expresii este adevărată.Ex:
(n == 0 || n == 1) - n este fie 0, fie 1.Ex:
!(x == 5) este echivalent cu x != 5.4. Funcții Logice (care returnează bool)
O funcție logică este pur și simplu un subprogram care are tipul returnat bool. Aceste funcții sunt extrem de utile la examene pentru a scrie cod mai curat. De obicei, răspund la o întrebare de tip "DA sau NU".
Exemplu: Verificarea Parității
// Returnează true dacă n este par, false altfel
bool estePar(int n) {
if (n % 2 == 0) {
return true;
} else {
return false;
}
}
// Utilizare (foarte elegantă):
if (estePar(10)) {
cout << "E par!";
}Exemplu: Funcția Prim (Bacalaureat)
// Funcție esențială la Subiectul III
bool estePrim(int n) {
if (n < 2) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for(int d=3; d*d<=n; d+=2) {
if (n % d == 0) return false;
}
return true;
}Capcane frecvente la Bacalaureat
- Puterile lui 2: Pentru a nu face greșeli la examene (subiectul 1 grilă), scrieți-vă clar pe ciornă primele puteri ale lui 2:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024. - Ordinea resturilor: La transformarea din Zecimal în Binar, o greșeală comună este să scrieți resturile de sus în jos. Amințiți-vă: întotdeauna de jos în sus!
- Depășirea tipului int: Un număr zecimal mic (ex: 2000) poate genera un număr binar foarte lung care, stocat ca un
int(ex:11111010000), poate duce la overflow. Dacă implementați algoritmul zecimal->binar în cod, este mai sigur să stocați binarul ca un `long long` sau `string`.