logo

Opérateurs Shift gauche et Right Shift en C/C++

Maj gauche(<<)

Il s'agit d'un opérateur binaire qui prend deux nombres, décale à gauche les bits du premier opérande et le deuxième opérande décide du nombre de places à décaler. En d’autres termes, décaler vers la gauche un entier un avec un entier b noté ' (un< équivaut à multiplier un avec 2^b (2 portés au pouvoir b).

Syntaxe:



a << b;>
    a : Premier opérande b : Deuxième opérande

Exemple: Prenons une=5 ; lequel est 101 sous forme binaire. Maintenant si a est décalé de 2 vers la gauche c'est à dire une=une<<2 alors un va devenir une=une*(2^2) . Ainsi, une=5*(2^2)=20 qui peut s'écrire comme 10100.

fonction d'opérateur de décalage à gauche

C








// C Program to demonstrate use> // of left shift operator> #include> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00001010> >printf>(>'a<<1 = %d '>, (a << 1));> >// The result is 00010010> >printf>(>'b<<1 = %d'>, (b << 1));> >return> 0;> }>

>

fichier d'extension java

>

C++




// C++ Program to demonstrate use> // of left shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00001010> >cout <<>'a<<1 = '> << (a << 1) << endl;> >// The result is 00010010> >cout <<>'b<<1 = '> << (b << 1) << endl;> >return> 0;> }>

>

>

Sortir

a<<1 = 10 b<<1 = 18>

Maj droite(>>)

Il s'agit d'un opérateur binaire qui prend deux nombres, décale vers la droite les bits du premier opérande et le deuxième opérande décide du nombre de places à décaler. En d’autres termes, décaler vers la droite un entier un avec un entier b noté ' (une>>b) ‘ équivaut à diviser a par 2^b.

Syntaxe:

a>>b;>
    a : Premier opérande b : Deuxième opérande

Exemple: Prenons une=5 ; lequel est 101 sous forme binaire. Maintenant si a est décalé de 2 vers la droite c'est-à-dire a=a>>2 alors un va devenir une=une/(2^2) . Ainsi, une=une/(2^2)=1 qui peut s'écrire comme 01 .

fonction d'opérateur de décalage à droite

C




// C Program to demonstrate> // use of right-shift operator> #include> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00000010> >printf>(>'a>>1 = %d '>, (a>> 1));> >// The result is 00000100> >printf>(>'b>>1 = %d'>, (b>> 1));> >return> 0;> }>

>

>

C++




// C++ Program to demonstrate> // use of right-shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00000010> >cout <<>'a>>1 = '> <>1)<< endl;> >// The result is 00000100> >cout <<>'b>>1 = '> <>1)<< endl;> >return> 0;> }>

>

>

Sortir

a>>1 = 2 b>>1 = 4>

Les points importants

1. Les opérateurs de décalage vers la gauche et vers la droite ne doivent pas être utilisés pour les nombres négatifs. Le résultat de est un comportement indéfini si l'un des opérandes est un nombre négatif. Par exemple, les résultats de 1>> -1 et 1 << -1 ne sont pas définis.

C




// C program to show behaviour of shift operators for> // negative values> #include> int> main()> {> >// left shift for negative value> >printf>(>'2 << -5 = %d '>, (2 << -5));> >// right shift for negative value> >printf>(>'2>> -5 = %d'>, (2>> -5));> >return> 0;> }>

>

>

C++




// C++ program to show behaviour of shift operators for> // negative values> #include> using> namespace> std;> int> main()> {> >// left shift for negative value> >cout <<>'2 << -5 = '> << (2 << -5) << endl;> >// right shift for negative value> >cout <<>'2>> -5 = '> <>-5)<< endl;> >return> 0;> }>

>

>

Sortir

2 <>-5 = 64>

2. Si le nombre est décalé plus que la taille de l'entier, le comportement n'est pas défini. Par exemple, 1 << 33 n'est pas défini si les entiers sont stockés sur 32 bits. Pour le décalage de bits de valeurs plus grandes 1ULL<<62 LULL est utilisé pour Unsigned Long Long qui est défini à l'aide de 64 bits pouvant stocker de grandes valeurs.

C




// c program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> int> main()> {> >int> N = 3;> >// left shift of 65 digits> >printf>(>'3 << 65 = %d'>, (3 << 65));> >return> 0;> }>

>

>

C++




// c++ program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> using> namespace> std;> int> main()> {> >int> N = 3;> >// left shift by 65 digits> >cout <<>'3 << 65'> << (3 << 65) << endl;> >return> 0;> }>

commande cp sous Linux
>

>

Sortir

3 << 65 = 0>

3. Le décalage vers la gauche de 1 et le décalage vers la droite de 1 sont respectivement équivalents au produit du premier terme et de 2 à la puissance donnée element(1<>3 = 1/pow(2,3)).

C




// C program for the above approach> #include> #include> int> main()> {> >printf>(>'2^5 using pow() function: %.0f '>,>pow>(2, 5));> >printf>(>'2^5 using left shift: %d '>, (1 << 5));> >return> 0;> }> // This code is contributed Prince Kumar>

>

>

C++




// C++ program to get the shifted values using pow()> #include> #include> using> namespace> std;> int> main()> {> >cout <<>'2^5 using pow() function'> <<>pow>(2, 5) << endl;> >cout <<>'2^5 using leftshift'> << (1 << 5) << endl;> >return> 0;> }>

>

>

Sortir

2^5 using pow() function: 32 2^5 using left shift: 32>

Doit lire: Opérateurs au niveau du bit en C/C++