next up previous contents
Next: Probleme rezolvate Up: Operatii la nivel de Previous: Operatori la nivel de   Cuprins


Utilizarea operatorilor

Un exemplu tipic de utilizare a operatorilor la nivel de bit este implementarea unei multimi ca vector de biti. În acest caz, un bit dintr-un întreg fara semn se asociaza unui element din multime, iar valoarea 1, respectiv 0 a unui bit semnifica prezenta, respectiv absenta elementului din multime. Numarul de elemente din multime este limitat la numarul de biti disponibili. În acest caz operatorul binar & este interpretat ca si intersectie, iar $\vert$ ca si reuniune.

Alte utilizari ale acestor operatori se întâlnesc în programele dedicate operatiilor hardware.

Indiferent de scopul în care sunt utilizati operatorii, maniera în care sunt folositi este în general aceeasi. În cele ce urmeaza, se vor descrie pe scurt principiile de baza ale utilizarii lor.

Atentie! Operatorii la nivel de bit nu modifica valoarea operanzilor (se comporta ca si operatorii aritmetici obisnuiti), astfel o operatie n « 2 va rezulta într-un nou numar, fara a modifica valoarea variabilei n. Pentru a modifica valoarea variabilei n trebuie sa avem o atribuire:

n = n « 2;

În general, operatorul si (&) este folosit pentru a masca anumiti biti dintr-un numar:

n = n & 177

va pune pe 0 bitii din n corespunzatori zero-urilor din reprezentarea binara a numarului 177 (adica 10110001), bitii corespunzatori unu-rilor ramânând nemodificati.

Operatorul sau ($\vert$) se comporta asemanator, doar ca elementul neutru nu este 1 ca la si, ci 0.

Trebuie facuta distinctia între operatorii la nivel de bit (& si $\vert$) si operatorii logici (&& si $\vert\vert$). De exemplu, daca x=1 si y=2, atunci x & y va fi 0, iar x && y va fi 1.

Operatorii de deplasare $<<$ si $>>$ realizeaza deplasarea bitilor din operandul stâng cu atâtea pozitii câte sunt indicate de operandul drept. În cazul deplasarii la stânga ($<<$) bitii din stânga se vor pierde, iar în dreapta numarului vor fi introduse cifre de 0. În cazul deplasarii la dreapta, bitii din dreapta se pierd, iar în stânga se introduc biti de 0, în caz ca numarul era de tip fara semn (unsigned, char) sau biti egali cu bitul de semn (cel mai din stânga bit) în cazul numerelor de tip cu semn.

Operatorul de negare $\thicksim$ realizeaza complementarea tuturor bitilor unui numar. Se impun doua observatii legate de acest operator:

  1. în general, daca dorim setarea pe 1 a unor biti de la începutul unui numar, nu vom folosi o expresie de tipul x = x & 252 (adica un numar cu primele cifre binare 1), deoarece nu putem fi siguri niciodata pe câti octeti este reprezentata variabila x (chiar daca stim exact de ce tip este variabila, lungimea reprezentarii depinde de arhitectura calculatorului si de sistemul de operare). Astfel, se va prefera folosirea unor expresii de tipul x = x & $\thicksim$ 3 (unde 3 = $\thicksim$ 252).
  2. deoarece reprezentarea interna a numerelor cu semn poate diferi între arhitecturi sau sisteme de operare diferite, operatorul de negare pe biti reduce portabilitatea programelor între diferite sisteme de calcul. Din acest motiv se recomanda folosirea acestui operator doar cu numere de tip fara semn.


next up previous contents
Next: Probleme rezolvate Up: Operatii la nivel de Previous: Operatori la nivel de   Cuprins
Cristian Gavrila 2001-10-02