Operatii la nivel de bit in C++
Salut si bine v-am gasit la un nou tutorial. Astazi vom vorbi despre operatiile la nivel de bit,dupa cum scrie si in titlu, mai exact va vom arata cateva aplicatii cu operatorii pe care i-am invatat in tutorialul trecut ( poate fi vizualizat aici: https://tutoriale-pe.net/lucrul-pe-biti-c/ ). Deci, sa incepem!
1.Transformarea unui bit in 1
Sa presupunem ca avem numarul n=60. Reprezentarea lui binara pe 8 biti este 00111100. Sa presupunem ca vrem sa transformam bitul 1 in 1 ( numerotarea bitilor se face de la 0 la n-1 ). Se va folosi o masca ce va avea toti bitii setati pe 0 in afara de bitul pe care dorim sa il transformam. In cazul nostru masca va fi M=00000010. Dupa cum probabil banuiti, vom folosi unul din operatori aplicat lui M si lui n. Acesta este operatorul de disjunctie, care dupa cum stiti, daca un bit are valoarea 1 si celalalt valoare 0, dupa aplicarea operatorului, noul bit va fi 1. De asemenea, celelalte valori nu vor fi afectate si astfel vom transforma bitul dorit in 1. Priviti imaginea de mai jos:
Asadar,am obtinut reprezentarea binara a lui 62. Putem sa generalizam aceasta operatie prin urmatoarea formula:
n | (1<<x)
x reprezinta bitul pe care dorim sa il schimbam, iar n este numarul caruia ii aplicam operatorul.
2.Transformarea unui bit in 0
Cum am reusit sa transformam un bit in 1, asa putem sa transformam si in 0.
Sa luam ca exemplu numarul 123. Reprezentarea lui binara este 01111011. Sa zicem ca vrem sa transformam bitul 3 in 1 ( din nou numerotarea este de la 0 la n-1 ). Vom folosi din nou o masca ce de data asta va avea toti bitii pusi pe 1 dar bitul 3 va avea valoarea 0. Ca sa o construim foarte simplu,o vom construi la fel ca masca anterioara si la final aplicam operatorul de negare ( notat cu ~ ). In caz ca nu va dati seama, operatorul care trebuie aplicat intre masca si numar este operatorul de conjunctie ( notat cu & ). Daca un bit are valoarea 1, iar celalalt valoarea 0, dupa aplicarea operatorului noul bit va avea valoarea 0,neschimband valorile celorlalti biti.Priviti imaginea de mai jos:
Asadar, s-a obtinut reprezentarea binara a lui 121. Formula generala pentru o astfel de transformare este
n & ~(1<<x)
3.Testarea valorii unui bit
Este la fel ca transformarea unui bit in 0 doar ca nu vom mai aplica mastii operatorul de negare. Priviti imaginea de mai jos:
Dupa cate se vede, valoarea bitului 1 este la fel dupa aplicarea lui &. Formula generala este la fel ca cea anterioara dar fara operatoru de negare.
n & (1<<x)
Cam acestea sunt cele mai simple aplicatii ale operatorilor pe biti. Vor urma si alte tutoriale in curand.