Les opérateurs binaires

Mammouth du PHP | 568 Messages

10 sept. 2009, 13:21

Salut à tous,

Je sais depuis longtemps qu'il existe des opérateurs binaires (<< et >>) permettant de décaler des bits, mais je me suis toujours demandé quelle était la finalité de tel opérateur.

Concrètement, quel en est l'utilité?

Merci à vous d'éclairer ma lanterne.

ViPHP
ViPHP | 5924 Messages

10 sept. 2009, 16:29

Ce sont des opérateurs hérités du C, ils sont traditionnellement utilisés pour des drivers, donc des opérations sur les bits des registres d'un périphérique, pour l'implémentation de protocoles plutôt bas niveau, comme un driver IP par exemple, ou encore pour l'établissement de masques (droits d'utilisateurs, niveau de logging), ou enfin pour avoir une multiplication ou une division par 2 ultra performante.
En gros c'est utilisé pour des opérations un peu spécifiques, souvent wrappées par des objets, des enums, etc dans de la programmation plus structurée comme peut l'être PHP, mais souvent indispensables pour de la programmation système.

Mammouth du PHP | 568 Messages

10 sept. 2009, 17:00

Merci pour tes précisions Sékiltoyai.

J'ai entendu dire que c'était utilisé dans le jeu vidéo?

ViPHP
ViPHP | 5924 Messages

10 sept. 2009, 17:39

C'est fort probable. C'est un domaine où on a besoin de beaucoup de performances sur les calculs, notamment le calcul de physiques ou de graphismes, et comme je le disais ces deux opérateurs sont ultra optimisés pour des multiplications ou des divisions.

Mammouth du PHP | 991 Messages

10 sept. 2009, 18:06

Je ne connais pas ces opérateurs , on peut me faire faire un exemple ? (de multiplication et de division ;D) merci d'avance

Bye Hawk
DevOps, Symfony4, Hoa

ViPHP
ViPHP | 5924 Messages

10 sept. 2009, 19:07

Bah pour une multiplication par 2 :

Code : Tout sélectionner

x = x<<1
Et pour une division :

Code : Tout sélectionner

x = x>>1
Concrètement, si on prend 12 (8+4) :
00001100
Et qu'on décale les bits d'une fois vers la gauche :
00011000
On a 24 (16+8).

Si on décale les bits d'une fois vers la droite :
00000110
On a 6 (4+2).

ViPHP
ViPHP | 1136 Messages

10 sept. 2009, 21:09

Pour un exemple concret ,

enfin , si je ne me trompe pas ,

Il me semble que cette technique est utilisée par PHP , pour les constantes d'error_reporting() ( à confirmer ).