logo

Operatorii Shift la stânga și la dreapta în C/C++

Shift la stânga(<<)

Este un operator binar care ia două numere, la stânga deplasează biții primului operand, iar al doilea operand decide numărul de locuri de mutat. Cu alte cuvinte, deplasarea la stânga a unui număr întreg A cu un număr întreg b notat ca ‘ (a< este echivalent cu înmulțirea A cu 2^b (2 ridicate la putere b).

Sintaxă:



a << b;>
    a: primul operand b: al doilea operand

Exemplu: Hai sa luam a=5 ; care este 101 în formă binară. Acum dacă a este deplasat la stânga cu 2 adică a=a<<2 apoi A va deveni a=a*(2^2) . Prin urmare, a=5*(2^2)=20 care poate fi scris ca 10100.

funcția operatorului de schimbare la stânga

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;> }>

>

>

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;> }>

>

>

ce este obj în java
Ieșire

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

Shift la dreapta(>>)

Este un operator binar care ia două numere, la dreapta deplasează biții primului operand, iar al doilea operand decide numărul de locuri de deplasat. Cu alte cuvinte, deplasarea la dreapta a unui număr întreg A cu un număr întreg b notat ca ‘ (a>>b) ‘ este echivalent cu împărțirea lui a cu 2^b.

Sintaxă:

a>> b;>
    a: primul operand b: al doilea operand

Exemplu: Hai sa luam a=5 ; care este 101 în formă binară. Acum dacă a este deplasat la dreapta cu 2 adică a=a>>2 apoi A va deveni a=a/(2^2) . Prin urmare, a=a/(2^2)=1 care poate fi scris ca 01 .

funcția operatorului schimbător dreapta

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;> }>

>

>

Ieșire

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

Puncte importante

1. Operatorii de deplasare la stânga și la dreapta nu trebuie utilizați pentru numere negative. Rezultatul este un comportament nedefinit dacă oricare dintre operanzi este un număr negativ. De exemplu, rezultatele ambelor 1>> -1 și 1 << -1 sunt nedefinite.

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;> }>

>

>

Ieșire

2 <>-5 = 64>

2. Dacă numărul este deplasat mai mult decât dimensiunea întregului, comportamentul este nedefinit. De exemplu, 1 << 33 este nedefinit dacă numerele întregi sunt stocate folosind 32 de biți. Pentru deplasarea de biți a valorilor mai mari 1ULL<<62 ULL este folosit pentru Unsigned Long Long, care este definit folosind 64 de biți care pot stoca valori mari.

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;> }>

>

>

Ieșire

3 << 65 = 0>

3. Deplasarea la stânga cu 1 și deplasarea la dreapta cu 1 sunt echivalente cu produsul primului termen și 2 cu puterea elementului dat (1<>3 = 1/pow(2,3)) respectiv.

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>

zerouri numpy
>

>

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;> }>

>

>

Ieșire

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

Trebuie citit: Operatori pe biți în C/C++