Cum functioneaza operatiile pe biti?

Intai transforma numarul intreg in baza 2 apoi, ele fac operatia respectiva si transforma rezultatul in baza 10.

!Observatie: Aceste operatii functioneaza doar pentru numere intregi.

Operator

Descriere Sintaxa
&   AND(si)   a&b
|   OR(sau)   a|b
~   NOT(negare)   ~a
^   XOR   a^b
>>   Mutare spre dreapta   a>>
<<   Mutare spre stanga   a<<

Acum hai sa luam fiecare operator in parte si sa vedem ce fac.

Incepem cu AND( & )

Incepem cu tabelul de adevar al acestui operator (Nu uitati ca in sistemul binar 1=True si 0=False)

a b      a & b
1 1         1
0 1         0
1 0         0
0 0         0

Acum ca avem tabelul de adevar haideti sa ne luam un exemplu sa vadem cum functioneaza acest operator din Python. Sa presupunem ca avem doua numere a=6, b=4. Haideti sa calculam a&b.

Primul pas este sa transformam numerele 6 si 4 in baza doi.

6=(110)2 

4=(100)2

Acum haideti sa calulcam (110)2 & (100)2 = (100)2 = 4 (0 si 0 dau 0, 1 si 0 dau 0, 1 si 1 dau 1)

Deci daca scriem codul asta in Python:

a=6
b=4
print(a&b)

In consola o sa vedem:

4

Operatorul OR( | )

Haideti sa facem si pentrun acesta tabelul de adevar:

a b               a | b 
1 1                 1
0 1                 1
1 0                 1
0 0                 0

O sa luam acelasi exemplu ca data trecuta. a=6=(110)2 , b=4=(100)2

Hai sa calculam acum: (110)2 | (100)2 = (110)2 = 6 (0 sau 0 dau 0, 1 sau 0 dau 1, 1 sau 1 dau 1)

Daca scriem urmatorul cod in Python:

a=6
b=4
print(a|b)

In consola o sa vedem:

6

Operatorul XOR( ^ )

Sa facem tabelul de adevar si pentru acesta

a b       a^b 
1 1         0
0 1         1
1 0         1
0 0         0

Calculam XOR pentru aceleasi valori ale variabilelor a si b. a=6=(110)2 , b=4=(100)2

Trebuie sa calculam a ^ b = (110)2 ^ (100)2 = (010)2 = 2 (0 xor 0 dau 0, 1 xor 0 dau 1, 1 xor 1 dau 0)

Daca scriem codul asta in Python:

a=6
b=4
print(a^b)

Consola o sa arate:

2

Operatorul NOT ( ~ )

Sa facem tabelul de adevar si pentru el:

a ~a
0  1
1  0

Sa luam si un exemplu in care a=6=(110)2

~(110)2 = (001)2 = 1 (~1=0, ~0=1)

Deci daca scriem codul:

a=6
print(~a)

In consola o sa vedem:

-7

Dupa cum puteti vedea in consola vedem un raspuns diferit fata de ce am calculat. De ce se intampla asta?

Se intampla pentru ca acest not nu este cel folosit in algebra booleana. Acest not este numit Bitwise NOT adica este un not special pentru biti. Cum functioneaza acest not? Aceste intai face notul logic al lui iar apoi face primul si al doilea complement al numarului. Haideti sa facem intai notul numarului a=6=(110)inseamna ca ~a=(001)2

Acum ca am facut notul numarului trebuie sa ii facem primul complement. Haideti sa vedem in ce consta primul complement. Primul complement este foarte simplu de inteles, acesta transforma toti de 0 in 1 si toti de 1 in 0. Deci primul complement al lui ~a=(0001)2 este (1110)  Acum probabil va intrebati care este diferenta intre not si primul complement. Pai not nu schimba si bitul de semn pe cand primul complement da.

De ce avem acum 4 biti si nu 3 cum aveam inainte? Pentru ca bitul 4 in acest caz este bitul de semn. Bitul de semn inseamna ca indica semnul (+ sau -). Cum in Python nu existe defaul optiunea de a declara o variabila unsigned (fara sa existe bitul de semn) asa cum exista in alte limbaje, in acesta toate variabilele au bitul de semn. Bitul de semn este 0 atunci cand numarul este pozitiv si 1 atunci cand numarul este negativ.

Acum dupa ce am facut notul logic si am gasit primul complement tot ce ne ramane de facut este sa facem al doilea complement. In ce consta al doilea complement? Al doilea complement adauga 1 la primutl complement daca numarul este negativ si un 0 daca el este pozitiv. In cazul nostru numarul este negativ asa ca o sa adaug 1.  (1110) + 1 = (1111)2  Cum primul bit reprezinta semnul inseamna ca avem -(111)2 = -7.

Aceasta parte este putin mai dificil de inteles dar este importanta pentru cursurile ce o sa urmeze.

Curs in lucru

Ultima modificare: duminică, 29 iunie 2025, 22:58