Sunteți pe pagina 1din 4

2022/10/18 05:52 1/4 Operații pe biți

Operații pe biți

Acest laborator are ca scop înțelegerea modului în care se utilizează operațiile pe biți. Se vor rezolva
o serie de exerciții pentru care va fi prezentat și codul aferent. Pentru exercițiile din secțiunea
următoare vor fi considerate două variabile:

x - o valoare pe 8 biți (unsigned char)

n - o valoare cuprinsă în intervalul zecimal [0-7]

Un alt mod de a interpreta operațiile pe biți

În tabelul de mai jos este prezentată o interpretare alternativă a operațiilor binare. Operatorii sunt
aplicați între un bit 'b' și valoarea menționată în tabel.

Studiu de caz #1

Cerință: Verificați dacă numărul x este par, folosind operații pe biți.

Putem scrie numărul x sub următoarea formă: b7 b6 b5 b4 b3 b2 b1 b0 . Biții b7-b0 corespund


puterilor lui 2.

Un număr este par dacă bitul b0 are valoarea 0.

Astfel, rezolvarea acestei probleme înseamnă de fapt să verificăm bitul b0. Pentru aceasta trebuie să
folosim o mască. În general, o mască înseamnă un număr cu o configurație ușor de obținut în binar.

Exemplu de mască: 0b00010000, care se obține prin operația 1«4

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/10 08:11 c:1:prog:lab:lab4 https://wiki.mta.ro/c/1/prog/lab/lab4

Pentru a verifica valoarea primului bit vom folosi o mască, cu valoarea zecimală 1, pentru a putea
selecta bitul b0. Pentru a alege operația pe biți favorabilă, vom consulta tabela de adevăr a funcțiilor
pe biți. În cazul nostru, vom utiliza operatorul ȘI (&).

Codul în limbajul C pentru această verificare este:

if (( x & 1 ) == 0)
//numarul este par

O altă metodă de a rezolva această problemă ar fi să ne folosim de faptul că operațiile de shift-are


introduc în număr valori de 0. Astfel:

Codul în limbajul C pentru această verificare este:

if ((( x << 7) >> 7) == 0)


//numarul este par

Codul în limbajul C (varianta 2):

x = x << 7;
x = x >> 7;
if( x == 0)
//numarul este par

Ex2. Scrieți o expresie, care să salveze în variabila x valoarea 1, dacă și numai dacă bitul n
are valoarea 1. Rezolvarea acestei probleme este asemănătoare cu rezolvarea problemei 1.
Considerăm că n=4.

În acest caz codul va fi următorul:

x = (x << (7 - n))>>7 ;

Varianta 2:

https://wiki.mta.ro/ Printed on 2022/10/18 05:52


2022/10/18 05:52 3/4 Operații pe biți

x = x << (7 - n) ;
x = x >> 7;

A doua variantă de rezolvare implică folosirea unei măști. Evident, aceasta trebuie să ducă la
selectarea bitului b4.

Pentru a rezolva problema în acest mod, vom folosi următoarea secvență de cod:

x = (x & (1 << n)) >> n;

Ex3. Scrieți un program care să inverseze valoarea bitului n din x.

Rezolvarea acestui program va presupune aceeași mască, dar operația folosită va fi, de această dată,
diferită.

După cum poate fi ușor de intuit, instrucțiunea de cod necesară este:

x = x ^ (1 << n);

Exerciții

Fie x un număr natural. Scrieți câte o expresie care sa utilizeze operatori pe biți astfel
încât:

1. Să înmulțească valoarea variabilei x cu 2n (unde 0≤n≤15);


2. Să împartă valoarea variabilei x cu 2n (unde 0≤n≤15);
3. Să aibă valoarea 1 dacă și numai dacă x este impar;
4. Să aibă valoarea 0 dacă și numai dacă bitul n(0≤n≤15) din x este 0;
5. Să anuleze bitul n (0≤n≤15) din x ;
6. Să seteze bitul n (0≤n≤15) din x (să îi atribuie valoarea 1).
7. Să facă toggle pe bitul n (0≤n≤15) din x ( toggle înseamnă să îi schimbe valoarea
).
8. Să schimbe toți biții numărului x, prin două metode.

Cursuri Academia Tehnică Militară "Ferdinand I" - https://wiki.mta.ro/


Last update: 2022/10/10 08:11 c:1:prog:lab:lab4 https://wiki.mta.ro/c/1/prog/lab/lab4

From:
https://wiki.mta.ro/ - Cursuri Academia Tehnică Militară "Ferdinand I"

Permanent link:
https://wiki.mta.ro/c/1/prog/lab/lab4

Last update: 2022/10/10 08:11

https://wiki.mta.ro/ Printed on 2022/10/18 05:52

S-ar putea să vă placă și