logo

Operadors de canvi a l'esquerra i a la dreta en C/C++

Maj esquerra (<<)

És un operador binari que pren dos nombres, desplaça a l'esquerra els bits del primer operand i el segon operand decideix el nombre de llocs a desplaçar. En altres paraules, desplaçament a l'esquerra d'un nombre enter a amb un nombre enter b denotada com ' (a< equival a multiplicar a amb 2^b (2 elevats al poder b).

Sintaxi:



a << b;>
    a: primer operand b: segon operand

Exemple: Prenem a=5 ; el qual és 101 en forma binària. Ara, si a es desplaça a l'esquerra en 2 és a dir a=a<<2 aleshores a es convertirà a=a*(2^2) . Així, a=5*(2^2)=20 que es pot escriure com 10100.

funció d'operador de canvi esquerre

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

>

>

Sortida

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

Maj dreta(>>)

És un operador binari que pren dos nombres, desplaça a la dreta els bits del primer operand i el segon operand decideix el nombre de llocs a desplaçar. En altres paraules, desplaçament a la dreta d'un nombre enter a amb un nombre enter b denotada com ' (a>>b) ‘ equival a dividir a per 2^b.

Sintaxi:

a>> b;>
    a: primer operand b: segon operand

Exemple: anem a prendre a=5 ; el qual és 101 en forma binària. Ara, si a es desplaça a la dreta en 2 és a dir, a=a>>2 aleshores a es convertirà a=a/(2^2) . Així, a=a/(2^2)=1 que es pot escriure com 01 .

git pull origin master

funció d'operador de canvi dret

C




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

>

>

Sortida

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

Punts importants

1. Els operadors de desplaçament a l'esquerra i a la dreta no s'han d'utilitzar per a nombres negatius. El resultat de és un comportament indefinit si algun dels operands és un nombre negatiu. Per exemple, els resultats d'1>> -1 i 1 << -1 no estan definits.

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

>

>

classe d'escàner java
Sortida

2 <>-5 = 64>

2. Si el nombre es desplaça més que la mida de l'enter, el comportament no està definit. Per exemple, 1 << 33 no està definit si s'emmagatzemen nombres enters amb 32 bits. Per al desplaçament de bits de valors més grans 1ULL<<62 ULL s'utilitza per Unsigned Long Long, que es defineix amb 64 ​​bits que poden emmagatzemar valors grans.

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

>

>

Sortida

3 << 65 = 0>

3. El desplaçament a l'esquerra per 1 i el desplaçament a la dreta per 1 són equivalents al producte del primer terme i 2 a l'element donat de potència (1<>3 = 1/pow(2,3)) respectivament.

C

propietats àcides en dbms




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

>

>

Sortida

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

Cal llegir: Operadors bit a bit en C/C++