Qu'est-ce qu'un décalage de bits ?
Un décalage de bits déplace les chiffres binaires d'un entier vers la gauche ou la droite d'un nombre de positions choisi. C'est une opération fondamentale en programmation, dans l'optimisation bas niveau, le traitement graphique, le hachage et les systèmes embarqués. Un décalage à gauche (n << k) déplace les bits vers le poids fort en comblant avec des zéros, tandis qu'un décalage à droite (n >> k) les déplace vers le poids faible.
Comment utiliser ce calculateur
Saisissez l'entier n, le nombre de positions à décaler k (en bits), puis choisissez le sens du décalage. Le calculateur affiche la valeur décimale obtenue. Cet outil utilise une arithmétique sur entiers signés de 64 bits, conforme au comportement de la plupart des langages de programmation.
La formule expliquée
Chaque décalage d'une position vers la gauche double le nombre : un décalage à gauche de k positions revient donc à multiplier par \(2^{k}\) :
$$\text{Result} = \text{Number (n)} \ll \text{Shift (k)} = n \times 2^{k}$$Chaque décalage d'une position vers la droite divise le nombre par deux avec troncature : un décalage à droite de k positions effectue donc une division entière par \(2^{k}\) :
$$\text{Result} = \text{Number (n)} \gg \text{Shift (k)} = \left\lfloor \frac{n}{2^{k}} \right\rfloor$$C'est pourquoi les décalages sont bien moins coûteux que la multiplication ou la division au niveau matériel.
Exemple concret
Prenons n = 16 et un décalage à gauche de k = 2. En binaire, 16 s'écrit 10000. Le décalage de deux positions vers la gauche ajoute deux zéros : 1000000, soit 64. Mathématiquement, \(16 \times 2^{2} = 16 \times 4 = 64\). Dans l'autre sens, \(64 \gg 2 = \left\lfloor 64 / 4 \right\rfloor = 16\) redonne la valeur de départ.
Tableau de Référence des Puissances de Deux
Un décalage à gauche de \(k\) multiplie un nombre par \(2^k\) ; un décalage à droite de \(k\) divise par \(2^k\) (en supprimant le reste pour les entiers). Utilisez ce tableau pour lire instantanément le multiplicateur ou le diviseur pour une quantité de décalage donnée.
| Décalage \(k\) | \(2^k\) (décimal) | Signification de \(\ll k\) / \(\gg k\) |
|---|---|---|
| 0 | 1 | pas de changement |
| 1 | 2 | \(\times 2\) / \(\div 2\) |
| 2 | 4 | \(\times 4\) / \(\div 4\) |
| 3 | 8 | \(\times 8\) / \(\div 8\) |
| 4 | 16 | \(\times 16\) |
| 5 | 32 | \(\times 32\) |
| 6 | 64 | \(\times 64\) |
| 7 | 128 | \(\times 128\) |
| 8 | 256 | \(\times 256\) (1 octet) |
| 9 | 512 | \(\times 512\) |
| 10 | 1,024 | \(\times 1024\) (1 Kio) |
| 11 | 2,048 | \(\times 2048\) |
| 12 | 4,096 | \(\times 4096\) |
| 13 | 8,192 | \(\times 8192\) |
| 14 | 16,384 | \(\times 16384\) |
| 15 | 32,768 | \(\times 32768\) |
| 16 | 65,536 | \(\times 65536\) (2 octets) |
| 17 | 131,072 | |
| 18 | 262,144 | |
| 19 | 524,288 | |
| 20 | 1,048,576 | \(\times\) 1 Mio |
| 32 | 4,294,967,296 | limite 32-bit |
| 63 | 9,223,372,036,854,775,808 | bit le plus significatif d'un entier signé 64-bit |
FAQ
Un décalage à gauche peut-il perdre des données ? Oui : les bits déplacés au-delà de la largeur de l'entier sont supprimés (dépassement de capacité). Sur 64 bits, ce calculateur conserve la valeur.
Que se passe-t-il avec les nombres négatifs lors d'un décalage à droite ? Ce calculateur applique un décalage à droite arithmétique (signé) : le bit de signe est préservé et les nombres négatifs restent négatifs.
Pourquoi utiliser des décalages plutôt qu'une multiplication ou une division ? Les décalages de bits s'exécutent en un seul cycle sur la plupart des processeurs : ils constituent un moyen rapide de multiplier ou diviser par des puissances de deux.