|

>> (décalage binaire vers la droite)


Description :

L’opérateur de décalage à droite >> provoque le décalage des bits de l’opérande gauche vers la droite du nombre de positions spécifié par l’opérande droit.

Syntaxe :

variable >> number_of_bits;

Paramètres :

variable : Types de données autorisés : tout type entier (byteshortintlongunsigned short…).

number_of_bits : un nombre positif inférieur à la largeur en bits de la variable. Types de données autorisés : int.

Exemple de code :

int a = 40;     // binary: 0000000000101000
    int b = a >> 3; // binary: 0000000000000101, decimal: 5

Remarques et avertissements :

Lorsque vous décalez x de y bits vers la droite (x >> y), les y bits les plus à droite de x disparaissent et sont ignorés. Si x est de type non signé (par exemple, unsigned int), les y bits les plus à gauche du résultat sont remplis de zéros. Si x est de type signé (par exemple, un int), son bit le plus à gauche est le bit de signe, qui détermine s’il est positif ou négatif. Dans ce cas, les y bits les plus à gauche du résultat sont remplis par des copies du bit de signe. Ce comportement, appelé « extension de signe », garantit que le résultat a le même signe que x.

int x = -16;          // binary: 1111111111110000
    int y = 3;
    int result = x >> y;  // binary: 1111111111111110, decimal: -2

Ce comportement n’est peut-être pas souhaité. Si vous souhaitez plutôt que les zéros soient décalés vers la gauche, vous pouvez utiliser un transtypage pour supprimer l’extension de signe :

int x = -16;                        // binary: 1111111111110000
    int y = 3;
    int result = (unsigned int)x >> y;  // binary: 0001111111111110, decimal: 8190

L’extension de signe permet à l’opérateur de décalage à droite >> d’effectuer une division par puissances de 2, même avec des nombres négatifs. Par exemple :

int x = -1000;
    int y = x >> 3; // integer division of -1000 par 8, provoquant y = -125.

Mais attention à l’arrondi avec les nombres négatifs :

int x = -1001;
    int y = x >> 3; // la division par décalage arrondit toujours vers le bas, ce qui provoque y = -126
    int z = x / 8;  // l'opérateur de division arrondit vers zéro, ce qui provoque z = -125

Source : https://docs.arduino.cc/language-reference/en/structure/bitwise-operators/bitshiftRight/

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *