Operatori pe biți în MySQL

Operatori MySQL 5.0+

Lucrează cu biții numerelor: ȘI (&), SAU (|), SAU exclusiv (^), inversare (~), deplasări (<<, >>).

Sintaxă
a & b   a | b   a ^ b   ~a   a << n   a >> n   BIT_COUNT(a)

Ce face Operatori pe biți

Operatorii pe biți tratează numerele ca șiruri de 0 și 1. Sunt folosiți pentru drepturi și opțiuni stocate ca biți într-o singură coloană: drepturi & 4 verifică dacă bitul 4 este activ.

~ inversează toți cei 64 de biți (de aceea ~0 este un număr foarte mare). BIT_COUNT() numără biții de 1.

Parametri

Parametru Descriere
a, b Numere întregi.
n Cu câte poziții se face deplasarea.

Ce returnează

Un număr întreg fără semn (64 de biți).

Exemple

Exemplul 1: Rezultatele operatorilor

SELECT 5 & 3 AS si, 5 | 3 AS sau, 5 ^ 3 AS sau_exclusiv,
       1 << 4 AS stanga, 256 >> 2 AS dreapta, BIT_COUNT(7) AS biti_activi;

Rezultat

+----+-----+--------------+--------+---------+-------------+
| si | sau | sau_exclusiv | stanga | dreapta | biti_activi |
+----+-----+--------------+--------+---------+-------------+
|  1 |   7 |            6 |     16 |      64 |           3 |
+----+-----+--------------+--------+---------+-------------+

Exemplul 2: Drepturi stocate ca biți

CREATE TABLE utilizatori (nume VARCHAR(10), drepturi INT);
-- 1 = citire, 2 = scriere, 4 = ștergere
INSERT INTO utilizatori VALUES ('ana', 7), ('dan', 1), ('ioana', 3);

SELECT nume,
       drepturi & 2 > 0 AS poate_scrie,
       drepturi & 4 > 0 AS poate_sterge,
       BIT_COUNT(drepturi) AS cate_drepturi
FROM utilizatori;

Rezultat

+-------+-------------+--------------+---------------+
| nume  | poate_scrie | poate_sterge | cate_drepturi |
+-------+-------------+--------------+---------------+
| ana   |           1 |            1 |             3 |
| dan   |           0 |            0 |             1 |
| ioana |           1 |            0 |             2 |
+-------+-------------+--------------+---------------+

Greșeli frecvente

  • Confunzi ^ cu ridicarea la putere. În MySQL, ^ este SAU exclusiv; pentru putere folosește POW().

Comenzi înrudite

  • BIT_AND(), BIT_OR(), BIT_XOR(): Combină pe biți toate valorile unui grup: ȘI, SAU, respectiv SAU exclusiv.
  • BIN() și OCT(): Returnează reprezentarea unui număr în baza 2 (BIN) sau în baza 8 (OCT), ca text.
  • POW(): Ridică un număr la o putere.