Sunteți pe pagina 1din 5

Lucrul cu biti: shiftare si operatii logice

Dupa cum se stie, calculatorul foloseste baza 2 pentru a stoca si prelucra informatiile, fie
ca acestea sunt reprezentate de documente text, filme, muzica sau chiar un simplu numar intreg.
Din acest motiv, fiecare limbaj de programare a necesitat implementarea unor operatii care sa
permita accesul direct la forma binara a datelor.
Shiftarea bitilor
(din engl. to shift = a muta, a deplasa)
Asa cum si traducerea o sugereaza, shiftarea bitilor este o deplasare a acestora posibila in
doua directii: la stanga sau la dreapta. Vom lua ca exemplu numarul 5 reprezentat binar pe biti:
!!!!!"!". #n limbajul $%% exista trei operatori care pot fi folositi pentru a shifta biti:
&& 'operator de shiftare la stanga(
)) 'operator aritmetic sau cu semn de shiftare la dreapta(
*ai exista un operator, +))), - operator logic de shiftare la dreapta - dar aparent nu exista in
$%%, asa ca ma voi rezuma doar la cei doi de mai sus.
Observatie: shiftarile bitilor nu sunt permutari, asadar nu avem de a face cu permutari
circulare!
1. <<
.hiftarea la stanga se realizeaza mutand toti bitii numarului la stanga cu un anumit numar
de pasi si completand bitii din coada 'din dreapta( cu valoarea !. /n exemplu:
5&&" 0 !!!!"!"! 0 "!
5&&2 0 !!!"!"!! 0 2!
5&&1 0 !!"!"!!! 0 2!
unde ", 2 si 1 reprezinta numarul de pasi. Dupa cum se observa 5 shiftat cu ", 2 si 1 da "! '532(,
2! '532(, respectiv 2! '53(. Asadar, avand doua numere si ! "# <<! " $%
!
.
Observatie: shiftarea la stanga nu este o shiftare circulara! 4xemplu:
1 55 !67 12 0 """!!!!! !!!!!!!! !!!!!!!! !!!!!!!!
1 55 !67 12&&" 0 ""!!!!!! !!!!!!!! !!!!!!!! !!!!!!!!
adica 1 55 !67 12&&" 0 1 22" 225 252. Asadar la numere mari care incap pe 12 de biti apar
deviatii de la regula de mai sus, iar bitul 'bitii, in functie de numarul de pasi( din stanga este
' sunt( pierdut ' in exemplul nostru, cel marcat(.
%. ##
4ste exact opusa shiftarii la stanga. 4xemplu:
"!))" 0 !!!!!"!" 0 5
2!))2 0 !!!!!"!" 0 5
2!))1 0 !!!!!"!" 0 5
unde, la fel ca la +&&,, ", 2 si 1 reprezinta numarul de pasi. Din nou se poate formula o
conjectura : avand doua numere si ! "# ##! " &%
!
, unde & este impartirea intreaga din
'((.
Observatie: shiftarea la dreapta nu recupereaza bitii pierduti printr-o shiftare la stanga!
4xemplu:
616 522 "!2 0 !!"""!!! !!!!!!!! !!!!!!!! !!!!!""!
616 522 "!2&&2 0 2 "25 21 522
2 "25 21 522 0 "!!!!!!! !!!!!!!! !!!!!!!! !""!!!!!
dar
''616 522 "!2 && 2( )) 2( 0 "12 2"5 512
"12 2"5 512 0 !!!!"!!! !!!!!!!! !!!!!!!! !!!!!""!
$am atat despre shiftarea pe biti in $%%. 8entru o verificare se poate folosi programul atasat
'.hifting bits(.
Operatii logice pe biti
Aceste operatii poarta numele de operatii booleene, dupa matematicianul 9eorge
:oole, inventatorul algebrei booleene. Desi stau la baza calcului computerizat, operatiile
booleene sunt cautate mai mult zilele acestea datorita utilizarii lor in criptografie.
;peratiile booleene pe biti si operatorii acestora in $%% sunt:
;peratie pe biti ;perator
<;= >
A<D ?
;@ A
B;@ C
Observatie: a nu se confunda primele trei operatii pe biti cu cele logice folosite de obicei la
compunerea unei conditii!
;peratie logica ;perator
<;= D
A<D ??
;@ AA
8entru exemplu vom folosi in continuare doua numere 'mai mici ( :
<otatie Valoare 'baza "!( Valoare 'baza 2(
x "2 """!
E "" "!""
1. )O* +complementul,
#nverseaza valoarea fiecarui bit din operand: " devine ! si ! devine ". ;peratorul
complementului in $%% este +>, 'tilde(.
x """! "2
>x !!!" "
E "!"" ""
>E !"!! 2
Observatie: complementul este un operator unar, singurul de acest tip dintre operatiile
booleene; celelalte trei compara doua reprezentari binare de aceeasi lungime, bit cu bit ( de pe
aceleasi pozitii), creand o noua reprezentare in functie de operatorul folosit.
%. A)-
Daca ambii biti sunt egali cu ", rezultatul va fi ". Altfel, rezultatul va fi !. ;peratorul in
$%% al operatiei +si, pe biti este +..
x """! "2
E "!"" ""
x ? E "!"! "!
/. O0
@ezultatul va fi " daca cel putin unul din cei doi biti comparati va fi egal cu ".
;peratorul in $%% al operatiei +sau, pe biti este +1,.
x """! "2
E "!"" ""
x A E """" "5
2. 3O0 +sau eclusiv,
Valoarea rezultata in urma acestei operatii este " daca cei doi biti comparati sunt
diferiti 'unul este ! iar celalalalt ", indiferent de ordine( si ! daca sunt identici 'ambii sunt egali
cu " sau cu !(. ;peratorul lui +sau exclusiv, in $%% este +4,.
x """! "2
E "!"" ""
x C E !"!" 5
Aceste operatii booleene, in special B;@, sunt folosite in algoritmi de criptare si in
functii de dispersie ' functii hash( precum *D5.
5roprietati
Fie a un numar intreg. Aruncand o scurta privire se pot observa cateva proprietati ale operatiilor
pe biti:
a C a 0 !
a C ! 0 a
a A a 0 a
a A ! 0 a
a ? ' > a( 0 !
a A ' > a( 0 """"G"" ' in functie de marimea lui a(
a C ' > a( 0 """"G"" 'in functie de marimea lui a(
8entru a calcula alte valori se poate folosi programul din dotare ' :itHise operations(.
6it +7,
Atat despre lucrul cu biti deocamdata. 8e masura ce voi descoperi ceva nou, voi fi bucuros sa
adaug aici sau sa concept un alt document mai vast si ceva mai colorat . Desigur, daca veti
descoperi greseli in acest articol puteti sa ma atentionati pe mail.
8ibliografie, resurse:
1. http://www.cplusplus.com
%. http://stackoverflow.com/questions/141525?sort=votes
I;vidiu 8orumb 2!!6