Les opérations bit à bit (première partie)
Il y a quelques semaines, mon pote Thibault est passé me voir pour que je le brief un petit peu sur les opérations bit à bit.
Ces opérations ne sont pas des plus compréhensibles (pour le commun des mortels), mais peuvent rendre de grands services.
Leurs utilisations (la liste est loin d’être exhaustive…):
- masquage
- cryptage (simpliste)
- extraction de données
- etc…
Je vais donc essayer de faire un récapitulatif simple et précis, avec quelques exemples.
Nous allons décrire ici les fonctions associées au opérations bit à bit en PHP, mais ces opérations sont valables dans tous les langages de programmations standard (seuls les noms des fonctions et la syntaxe risque de changer, le principe de base reste le même).
Vous trouverez une référence à ces fonctions ici:
http://www.php.net/manual/en/language.operators.bitwise.php
ou ici pour la version française:
http://www.php.net/manual/fr/language.operators.bitwise.php
Opérations de comparaison
Il y a 4 opérations de comparaisons bit à bit:
- AND (ET)
Permet de faire une addition bit à bit de deux données.
Il faut que les deux données soit à 1 pour que le résultat soit à 1.
exemple:
A = 0110 1101
B = 1101 1001
donc si C = A & B
C = 0100 1001
- OR (OU ou OU inclusif)
Ou inclusif, si une des deux variables est a un, le résultat est à un.
On reprend les mêmes variables
C = A | B
C = 1111 1101
- XOR (OU exclusif)
Ou inclusif, une seule des deux variables doit être a un, pour que le résulat soit à un.
C = A ^ B
C = 1011 0100
- NOT (Inverse - Non)
Si la variable est à 1 le résultat est égal à 0 et inversement
C = ~ A
C = 1001 0010
Opérations de décalage
il y a deux opérations de décalage:
- décalage vers la droite
permet de diviser un chiffre par deux, décale tous les bits d’un emplacement vers la droite.
exemple:
C >> A
C = 0011 0110
- décalage vers la gauche
permet de multiplier un chiffre par deux, décale tous les bits d’un emplacement vers la gauche.
exemple:
C << A
C = 1101 1010
Voila le principe général.
Vous voyez rien de bien compliqué…
J’essayerais dans une deuxième partie, de prouver par l’exemple en quoi ces opérations sont intéressantes.