Documente Academic
Documente Profesional
Documente Cultură
De cele mai multe ori, fie într-un joc, fie în viața de zi cu zi a unui programator,
atunci când implementăm o metodă pe care o folosește o aplicație și dorim ca
acea metodă să funcționeze ca una eficientă, trebuie să analizăm complexitatea
algoritmului implementat. observăm că în practică algoritmul este mai lent decât
ne-am dori, încercăm să găsim un algoritm cu o complexitate mai mică.
Nu trebuie să uităm că atunci când vorbim de complexitate algoritmică, este o
aproximare a vitezei algoritmice, nu o măsură absolută. Pentru volume mici de
date, uneori nu există nicio diferență între O(n) și O(n log n) sau O(n3 / 2).
Operațiile pe biți sunt utilizate pe scară largă în optimizatoare, în special atunci
când se ocupă direct cu numere de bază 2 sau cu puteri de 2.
Operatorii C++ pe biți sunt implementați în limbaj de asamblare, ceea ce îi face
foarte rapidi. Operatorii pe biți, după cum sugerează și numele, lucrează pe biții
(semnați și nesemnați) ai numerelor întregi. Acest lucru poate părea ciudat, mai
ales având în vedere că cea mai mică zonă de memorie cu o adresă este un octet,
care constă de fapt din 8 biți. În primul rând, pentru a înțelege cum funcționează
acești operatori, trebuie să înțelegem cum sunt reprezentați în C++ ca întreg.
EXEMPLE:
1. Se consideră un număr natural n. Să se verifice dacă n este par sau impar.
Rezolvare: Utilizăm operatorul &. Acesta are rol de testare a biţilor. Dacă n este impar, atunci
reprezentarea sa în baza 2 va avea cel mai din dreapta bit pe 1. De exemplu, n = 13 se scrie în
baza 2 ca 1101. Atunci 1101 & 1 = 1. Dacă n este par, atunci cel mai din dreapta bit va fi 0. De
exemplu, n = 14 se scrie în baza 2 ca 1110. Atunci 1110 & 1 = 0. Iată că pentru orice număr n,
expresia n & 1 furnizează ca rezultat cel mai din dreapta bit. Putem scrie atunci următoarea
secvenţă:
cin >> n ;
if (( n & 1 ) == 1) cout << "Numar impar" ;
else cout << "Numar par" ;
De menţionat faptul că operatorii pe biţi au o prioritate mică, de aceea am preferat o pereche
suplimentară de paranteze în expresia instrucţiunii if. Expresia n & 1 == 1 este interpretată de
compilator ca fiind n & (1 == 1)