Skip to content

Operații pe biți

În memorie, datele sunt reprezentate prin biți. Din această cauză, uneori poate fi necesară sau mai facilă utilizarea unor operații care să impacteze direct biții unei valori.

O variabilă de tip int este stocată pe 32 de biți, primul bit fiind bitul de semn. Un exemplu este numărul 133, a cărui reprezentare este 0000000010000101, cu primul bit 0, adică numărul este pozitiv. O variabilă de tip long long este stocată pe 64 de biți după aceeași regulă.

Operatori

Operatorul de shiftare spre stânga <<

Operatorul de shiftare spre stânga mută toți biții numărului spre stânga cu numărul de poziții specificate, inserând 0. Exemplu

1 << 3 == 8 // 1 -> 1000
1 << 6 == 64 // 1 -> 1000000
Pentru a calcula 2^n putem folosi operația 1 << n.

Operatorul de shiftare spre dreapta >>

Operatorul de shiftare spre dreapta mută toți biții numărului spre dreapta cu numărul de poziții specificate, inserând 0. Exemplu

8 >> 3 == 8 // 1000 -> 1
5 >> 2 == 1 // 101 -> 1

Operatorul de negație ~

Operatorul de negație dă flip la toate valorile biților. Exemplu

~ 133 == -134 // 133 este 0000000010000101, iar -134 este 1111111101111010

Operatorul de conjucție &

Operatorul de conjuncție, sau după denumirea logică AND, evaluează fiecare pereche de biți în parte dupa următorul tabel de adevăr.

0 & 0 == 0
0 & 1 == 0
1 & 0 == 0
1 & 1 == 1
Exemplu
5 & 0 == 4
(133 & (1 << 7)) >> 7 == 1 // 133 este 0000000010000101, iar (1 << 7) este 10000000

Operatorul de disjucție |

Operatorul de disjuncție, sau după denumirea logică OR, evaluează fiecare pereche de biți în parte dupa următorul tabel de adevăr.

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
Exemplu
5 | 2 == 7 // 5 este 101, 2 este 10, iar 7 este 111

Operatorul de disjucție exclusivă ^

Operatorul de disjucție exclusivă, sau după denumirea logică XOR, evaluează fiecare pereche de biți în parte dupa următorul tabel de adevăr.

0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0
Exemplu
5 ^ 2 == 7 // 5 este 101, 2 este 10, iar 7 este 111
5 ^ 3 == 6 // 5 este 101, 2 este 11, iar 7 este 110