MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Operații pe biți

Operațiile pe biți se efectuează asupra fiecărui bit al numerelor în reprezentarea binară. De exemplu, numărul cinci în sistemul binar are trei biți: 101, iar numărul opt are patru biți: 1000.

Operații de deplasare

Operațiile de deplasare permit deplasarea reprezentării binare a unui număr cu un anumit număr de biți la dreapta sau la stânga. Operațiile de deplasare se aplică doar asupra operandilor întregi. Există două operații:

  • <<

Deplasează reprezentarea binară a unui număr (reprezentat de primul operand) la stânga cu un anumit număr de biți, specificat de al doilea operand.

  • >>

Deplasează reprezentarea binară a unui număr la dreapta cu un anumit număr de biți.

Aplicarea operațiilor:

var b int = 2 << 2;           // 10  pe două biți la stânga = 1000 - 8
var c int = 16 >> 3;          // 10000 pe trei biți la dreapta = 10 - 2

Numărul 2 în reprezentarea binară este 10. Dacă deplasăm numărul 10 cu două locuri la stânga, obținem 1000, care în sistemul zecimal este 8.

Numărul 16 în reprezentarea binară este 10000. Dacă deplasăm numărul 10000 cu trei locuri la dreapta (eliminând ultimele trei locașuri), obținem 10, care în sistemul zecimal este 2.

Operațiile pe biți se efectuează de asemenea doar asupra biților operandilor întregi:

  • &: Conjuncția pe biți (operația "și" sau înmulțire pe biți). Returnează 1 dacă amândoi biții corespunzători ai ambelor numere sunt 1. Returnează 0 dacă un bit din oricare dintre numere este 0
  • |: Disjuncția pe biți (operația "sau" sau adunare pe biți). Returnează 1 dacă cel puțin un bit corespunzător din ambele numere este 1
  • ^: Excluderea pe biți. Returnează 1 dacă doar un singur bit corespunzător din ambele numere este 1
  • &^: Resetarea unui bit (AND NOT). În expresia z = x &^ y, fiecare bit din z va fi 0 dacă bitul corespunzător din y este 1. Dacă bitul din y este 0, atunci se va lua valoarea bitului corespunzător din x

Aplicarea operațiilor:

package main
import "fmt"

func main() {
    var a int = 5 | 2;          // 101 | 010 = 111  - 7
    var b int = 6 & 2;          // 110 & 010 = 10  - 2
    var c int = 5 ^ 2;          // 101 ^ 010 = 111 - 7
    var d int = 5 &^ 6;         // 101 &^ 110 = 001 - 1
}

De exemplu, expresia 5 | 2 este egală cu 7. Numărul 5 în reprezentarea binară este 101, iar numărul 2 este 10 sau 010. Vom aduna biții corespunzători fiecărui număr. La adunare, dacă cel puțin un bit este 1, suma celor doi biți va fi 1. Astfel, obținem:

1 0 1
0 1 0
1 1 1

Rezultatul este numărul 111, care în sistemul zecimal reprezintă 7.

Să luăm o altă expresie, 6 & 2. Numărul 6 în reprezentarea binară este 110, iar numărul 2 este 10 sau 010. Vom înmulți biții corespunzători fiecărui număr. Produsul celor doi biți va fi 1 doar dacă ambii biți sunt 1. Altfel, produsul va fi 0. Astfel, obținem:

1 1 0
0 1 0
0 1 0

Rezultatul este 010, care în sistemul zecimal reprezintă 2.