De ce contează?
Imaginează-ți două panouri lungi de becuri, fiecare bec fie aprins (1), fie stins (0). Vrei să combini cele două panouri într-unul singur, dar regula nu se uită la „numărul” pe care îl formează becurile — se uită la fiecare bec în parte, în oglindă cu vecinul lui de pe celălalt panou. „Aprinde becul nou doar dacă ambele erau aprinse” e o regulă (asta face AND). „Aprinde-l dacă măcar unul era aprins” e alta (asta face OR). Exact asta fac operatorii pe biți: zeci de becuri decise deodată, fiecare independent de vecinii lui, dintr-o singură mișcare.
Intuiția
Un număr întreg e, în memorie, un șir de biți (0 și 1). Operatorii pe biți nu tratează numărul ca pe o cantitate, ci ca pe acel șir: aliniază cei doi operanzi bit cu bit și aplică o regulă simplă pe fiecare coloană, independent de celelalte. Pentru deplasări, în schimb, mutăm tot șirul la stânga sau la dreapta — și, surpriza, o mutare cu o poziție e exact o înmulțire sau o împărțire cu 2.
Reține de pe acum scurtătura: deplasarea la stânga cu k poziții înmulțește numărul cu 2^k, iar deplasarea la dreapta cu k îl împarte întreg la 2^k. Compilatoarele chiar fac asta în spate când înmulțesc cu o putere a lui 2 — e cea mai ieftină înmulțire posibilă.